сортировка DataSet между чтением и записью в XML - PullRequest
1 голос
/ 22 июля 2010

Цель состоит в том, чтобы заполнить набор данных из XML, отсортировать одну из таблиц данных, а затем записать отсортированный набор данных обратно в XML.

Не получается отсортировать мой набор данных, и я попробовал несколько вариантов. Он добавляет данные в порядке, но не сортирует. Надеюсь, кто-нибудь поможет мне вырвать мои волосы.

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);

UPDATE

Теперь он удаляет другие таблицы из набора данных. Вот как должен выглядеть 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>

И это выглядит так, удаляя другие таблицы, но сортировка работает нормально:)

</DocumentElement>
  <cj>
    <a></a>
    <b></b>
    <c></c>
  </cj>
  <cj>
    <a></a>
    <b></b>
    <c></c>
  </cj>
  <cj>
    <a></a>
    <b></b>
    <c></c>
  </cj>
</DocumentElement>

Как я могу использовать C # для сортировки только DataTable cj, а затем записать весь DataSet обратно в XML? settings и perms должны остаться нетронутыми.

Ответы [ 3 ]

3 голосов
/ 22 июля 2010

Одним из способов достижения вашей цели является:

  • загрузить отсортированные объекты CJ в новую таблицу данных
  • удалить несортированные из исходного набора данных
  • повторно заполнитьDataSet с новым набором отсортированных CJ

Вот подтверждение концепции сортировки на pastebin .Я использовал этот XML с доказательством .Вывод показан отсортированным, как и следовало ожидать .

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);
2 голосов
/ 22 июля 2010

Вы успешно применили сортировку к DataView.Используйте метод DataView .ToTable(), а затем используйте метод Table .WriteXML() для вывода в файл.

dtView.ToTable().WriteXml(sw);
0 голосов
/ 22 июля 2010

Созданное вами представление данных отражает отсортированные результаты, а не базовый набор данных.

...