ADO.NET DataTable 排序没有反映在包含 DataSet 中

ADO.NET DataTable sort does not reflect in containing DataSet

我想对数据集中的数据表进行排序。我有以下代码:

DataTable dt = ds.Tables[0];
dt.TableName = "NEWNAME";
dt.DefaultView.ApplyDefaultSort = false;
dt.DefaultView.Sort = "COL1 desc";
dt = dt.DefaultView.ToTable();
dt.AcceptChanges(); // <-- Break Point Here
ds.AcceptChanges();

当我在 Visual Studio 中的断点后单步执行代码时,在 VS 可视化工具中检查 dt 显示已排序 table,但随后在 VS 可视化工具中检查 ds 不显示 table 数据按排序顺序排列,即使反映了名称更改。我尝试了多种方法对 google 搜索中可用的数据 table 进行排序,但结果保持不变。

我做错了什么?

DefaultView.Sort 不对任何内容进行排序。它只是一个字符串,当您需要像在行

中那样构造新的 table 时使用
dt = dt.DefaultView.ToTable();

在这一点之后,dt 引用(使用从 DefaultView.Sort 获取的信息正确排序)不再指向 ds.Tables[0]。这是一个全新的数据表。

DefaultView.Sort 应用的另一种方式是当您像

那样循环遍历 DefaultView 时
foreach(DataViewRow dvr in ds.Tables[0].DefaultView)
{
     // Here you get a row from the table sorted according to the property.
     DataRow row = dvr.Row;
     .....
}