2

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

在此处输入图像描述

我想根据第 2 列对数据表行进行排序。(带有标题 E)是否有任何内置函数可以做到这一点?

我试过..

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

2 回答 2

7

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

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

如果你不能使用 Linq,你可以使用DataView.Sort

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

但是使用 a DataView,原件DataTable是未排序的。

所以如果你需要这张桌子,你可以使用DataView.ToTable

tbl = view.ToTable();
于 2012-07-24T14:27:04.127 回答
4

您可以按列对数据表进行排序

 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 也发生了变化:所有已添加和已修改的行都变为未更改,而已删除的行将被删除。

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

于 2012-07-24T14:35:23.570 回答