如何在c#中更改Datatable列顺序.
例:
我创建的sql表类型顺序是Qty,Unit,Id但是在程序DataTable命令中是Id,Qty,Unit.在代码Behind am中直接将DataTable传递给sql表类型,因此表顺序不同.
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
Run Code Online (Sandbox Code Playgroud)
请帮忙
def*_*ale 216
尝试使用DataColumn.SetOrdinal方法.例如:
dataTable.Columns["Qty"].SetOrdinal(0);
dataTable.Columns["Unit"].SetOrdinal(1);
Run Code Online (Sandbox Code Playgroud)
更新:这个答案比我预期的要多得多.为了避免混淆并使其更易于使用,我决定在DataTable中为列排序创建一个扩展方法:
扩展方法:
public static class DataTableExtensions
{
public static void SetColumnsOrder(this DataTable table, params String[] columnNames)
{
int columnIndex = 0;
foreach(var columnName in columnNames)
{
table.Columns[columnName].SetOrdinal(columnIndex);
columnIndex++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
table.SetColumnsOrder("Qty", "Unit", "Id");
Run Code Online (Sandbox Code Playgroud)
要么
table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
Run Code Online (Sandbox Code Playgroud)
这是基于"默认语言环境"的答案,但它会在设置序号之前删除无效的列名称.这是因为如果你不小心发送了一个无效的列名,那么它就会失败,如果你进行检查以防止它失败,那么索引就会出错,因为它会在传递无效列名的地方跳过索引.
public static class DataTableExtensions
{
/// <summary>
/// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first.
/// </summary>
/// <param name="table"></param>
/// <param name="columnNames"></param>
/// <remarks> http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order</remarks>
public static void SetColumnsOrder(this DataTable dtbl, params String[] columnNames)
{
List<string> listColNames = columnNames.ToList();
//Remove invalid column names.
foreach (string colName in columnNames)
{
if (!dtbl.Columns.Contains(colName))
{
listColNames.Remove(colName);
}
}
foreach (string colName in listColNames)
{
dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120180 次 |
最近记录: |