我有一个包含 3 列的以下数据表。
我想根据第 2 列对数据表行进行排序。(带有标题 E)是否有任何内置函数可以做到这一点?
我试过..
dt.DefaultView.Sort = dt.Columns[1].ColumnName;
dt.AcceptChanges();
可能最简单(也是最强大)的方法是使用Linq-To-DataSet
and 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();
您可以按列对数据表进行排序
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 方法。