如何在C#中更改Datatable列的顺序。
例:
创建的sql表类型顺序为Qty,Unit,Id,但在程序DataTable中的顺序为Id,Qty,Unit。在后面的代码中,直接将DataTable传递给sql表类型,因此表顺序不同。
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
请帮忙
如何在C#中更改Datatable列的顺序。
例:
创建的sql表类型顺序为Qty,Unit,Id,但在程序DataTable中的顺序为Id,Qty,Unit。在后面的代码中,直接将DataTable传递给sql表类型,因此表顺序不同。
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
请帮忙
Qty,Unit,Id
但在程序DataTable中的顺序为Id,Qty,Unit
。在后面的代码中,直接将DataTable传递给sql表类型,因此表顺序不同。这就是为什么要问“如何更改列顺序?”
Answers:
尝试使用DataColumn.SetOrdinal方法。例如:
dataTable.Columns["Qty"].SetOrdinal(0);
dataTable.Columns["Unit"].SetOrdinal(1);
更新:这个答案比我预期的受到更多关注。为了避免混淆并简化使用,我决定为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++;
}
}
}
用法:
table.SetColumnsOrder("Qty", "Unit", "Id");
要么
table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
Qty,Id,Unit
指示,将表结构更改为 only Qty,Unit,Id
。我想要这样 。
这基于“默认语言环境”的答案,但是在设置序数之前它将删除无效的列名。这是因为如果您不小心发送了无效的列名,那么它将失败,并且如果您进行了检查以防止失败,则索引将是错误的,因为无论传入无效列名的地方,索引都会跳过索引。
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));
}
}
根据某些条件或复选框重新订购数据表。PFB:-
var tableResult= $('#exampleTable').DataTable();
var $tr = $(this).closest('tr');
if ($("#chkBoxId").prop("checked"))
{
// re-draw table shorting based on condition
tableResult.row($tr).invalidate().order([colindx, 'asc']).draw();
}
else {
tableResult.row($tr).invalidate().order([colindx, "asc"]).draw();
}