C# 在读取和写入XML之间对数据集进行排序
目标是从XML填充数据集,对其中一个数据表进行排序,然后将排序后的数据集写回XML 我似乎无法对数据集进行排序,并尝试了一些变体。它添加数据,但不进行排序。希望有人能帮我阻止我拔头发C# 在读取和写入XML之间对数据集进行排序,c#,ado.net,dataset,C#,Ado.net,Dataset,目标是从XML填充数据集,对其中一个数据表进行排序,然后将排序后的数据集写回XML 我似乎无法对数据集进行排序,并尝试了一些变体。它添加数据,但不进行排序。希望有人能帮我阻止我拔头发 DataSet dsXml = new DataSet(); dsXml.ReadXml(msXml); DataTable tbl; // Read DataTable. tbl = dsXml.Tables["cj"]; // Set Primary Key tbl.PrimaryKey = new DataC
DataSet dsXml = new DataSet();
dsXml.ReadXml(msXml);
DataTable tbl;
// Read DataTable.
tbl = dsXml.Tables["cj"];
// Set Primary Key
tbl.PrimaryKey = new DataColumn[] { tbl.Columns["a"] };
DataView dtView = tbl.DefaultView;
DataRow foundRow = tbl.Rows.Find(findCookiejarId);
tbl.Rows.Add(addRow);
dtView.ToTable().Sort = "a ASC";
StringWriter sw = new StringWriter();
dsXml.WriteXml(sw);
更新
现在,它将从数据集中删除其他表。以下是xml的外观:
<user_data>
<settings>
<a></a>
<b></b>
<c></c>
</settings>
<perms>
<a></a>
<b></b>
<c></c>
</perms>
<cj>
<a></a>
<b></b>
<c></c>
</cj>
<cj>
<a></a>
<b></b>
<c></c>
</cj>
<cj>
<a></a>
<b></b>
<c></c>
</cj>
</user_data>
看起来是这样的,删除了其他表,但排序工作正常:)
如何使用C#对DataTable
cj
进行排序,然后将整个数据集写回XML?设置
和perms
应保持不变。您创建的数据视图反映的是排序结果,而不是基础数据集。您创建的数据视图反映的是排序结果,而不是基础数据集。您已成功地将排序应用于数据视图。使用DataView的.ToTable()
方法,然后使用表的.WriteXML()
方法输出到文件
dtView.ToTable().WriteXml(sw);
您已成功地将排序应用于DataView。使用DataView的
.ToTable()
方法,然后使用表的.WriteXML()
方法输出到文件
dtView.ToTable().WriteXml(sw);
实现目标的一种方法是:
- 将已排序的CJ实体加载到新的数据表中
- 从原始数据集中删除未排序的
- 使用新的已排序CJ集重新填充数据集
实现目标的一种方法是:
- 将已排序的CJ实体加载到新的数据表中
- 从原始数据集中删除未排序的
- 使用新的已排序CJ集重新填充数据集
谢谢,这很恰当!玩了一个小时左右:)你知道为什么它要用应该的时间替换xml中的根节点吗?@arbme:常见的建议是将从
ToTable()
返回的数据表添加到全新的数据集
。从那里,命名数据集,DocumentElement
将更改为数据集的名称。然后调用WriteXml
,也许它会按照您的期望成形。谢谢,它正好击中了目标!玩了一个小时左右:)你知道为什么它要用应该的时间替换xml中的根节点吗?@arbme:常见的建议是将从ToTable()
返回的数据表添加到全新的数据集
。从那里,命名数据集,DocumentElement
将更改为数据集的名称。然后调用WriteXml
,也许它会像您期望的那样成形。非常感谢您,先生,就是这份工作!非常感谢你,先生,这就是工作!
DataSet ds = new DataSet();
ds.ReadXml(@"D:\foo.xml");
DataTable tbl = ds.Tables["cj"];
tbl.PrimaryKey = new DataColumn[] { tbl.Columns["a"] };
DataView view = tbl.DefaultView;
view.Sort = "a ASC";
DataTable sortedBy_a = view.ToTable();
//remove all the CJ tables -- they're currently unsorted
ds.Tables.Remove("cj");
//add in all the sorted CJ tables
ds.Tables.Add(sortedBy_a);
StringWriter sw = new StringWriter();
ds.WriteXml(sw);