使用任何dataColumn对Datarows进行排序

时间:2012-07-24 14:23:49

标签: c# sorting datatable

我有一个包含3列的以下数据表。

enter image description here

我想在第二列的基础上对数据表行进行排序。(带标题E) 是否有内置功能吗?

我试过..

    dt.DefaultView.Sort = dt.Columns[1].ColumnName;
    dt.AcceptChanges();

2 个答案:

答案 0 :(得分:6)

最简单(也是最强大)的方法可能是使用Linq-To-DataSetEnumerable.OrderBy

var tblOrdered = tbl.AsEnumerable()
                    .OrderBy(row => row.Field<int>("E"))
                    .CopyToDataTable();

如果您无法使用Linq,则可以使用DataView.Sort

DataView view = tbl.DefaultView;
view.Sort = "E ASC";

但是使用DataView,原始DataTable未分类。

因此,如果您需要该表,可以使用DataView.ToTable

tbl = view.ToTable();

答案 1 :(得分:3)

您可以按列

对数据进行排序
 dt.DefaultView.Sort = "E Asc";

这样

string[] names = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
    names[i] = dt.Rows[i]["E"].ToString();
}
Array.Sort(names);

for (int i = 0; i < dt.Rows.Count; i++)
{
    dt.Rows[i]["E"] = names[i];
}

同样dt.AcceptChanges将提交对表格所做的所有更改。 aah msdn还说必须在尝试更新后调用

  

来自MSDN的评论

     

调用AcceptChanges时,任何DataRow对象仍处于编辑模式   成功结束编辑。 DataRowState也会更改:全部已添加   和修改的行变为未更改,删除的行将被删除。

     

通常在您之后在DataTable上调用AcceptChanges方法   尝试使用DbDataAdapter.Update方法更新DataSet。