我有一个包含3列的以下数据表。
我想在第二列的基础上对数据表行进行排序。(带标题E) 是否有内置功能吗?
我试过..
dt.DefaultView.Sort = dt.Columns[1].ColumnName;
dt.AcceptChanges();
答案 0 :(得分:6)
最简单(也是最强大)的方法可能是使用Linq-To-DataSet
和Enumerable.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。