Отображение иерархических данных XML с использованием DataGrid - PullRequest
3 голосов
/ 19 июля 2009

У меня есть XML-файл, такой как показан ниже

<root>
  <child1>
    <grandchild1>
       <greatgrandchild1>
       </greatgrandchild1>
       <greatgrandchild2>
       </greatgrandchild2>
       ...
    </grandchild1>
    <grandchild2>
    </grandchild2>
    <grandchild3>
    </grandchild3>
    ...
  </child1>
  <child2>
    <grandchild1>
    </grandchild1>
    <grandchild2>
    </grandchild2>
    <grandchild3>
    </grandchild3>
    ...
  </child2>
  <child3>
    <grandchild1>
    </grandchild1>
    <grandchild2>
    </grandchild2>
    <grandchild3>
    </grandchild3>
    ...
  </child3>
  ...
</root>

Каждый дочерний узел имеет свое имя. Мне нужно отобразить этот XML следующим образом:

Каждый дочерний узел отображается как Expander. Все внуки этого дочернего узла находятся внутри этого расширителя. Каждый внук и его дети должны быть сгруппированы и иметь цвет фона. У следующего внука и его детей должен быть альтернативный цвет фона.

Все данные имеют два столбца. Поэтому элемент управления, выбранный для отображения этих данных, должен поддерживать несколько столбцов.

Я думал о DataGrid. Но я не могу использовать его встроенные функции, так как не могу связывать данные. Мне нужно программно добавить элементы в DataGrid. Пожалуйста, дайте мне знать, как я могу решить эту проблему. Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 31 января 2010

Как только Бен очистил ваш XML, самый простой метод, который я нашел для работы с иерархическими данными XML, - это загрузить их в объект DataSet (DataSet.ReadXML ()).

Затем вы можете привязать DataSet и конкретную таблицу данных, которую вы хотите, к своему элементу управления сеткой.

0 голосов
/ 31 января 2010

Это действительно не XML. Каждый элемент имеет другой тип, потому что каждый назван по-разному. Нет ли способа перевести ваши данные в правильно отформатированный XML? Например:

<root>
  <child name="name1">
    <grandchild name="name11">
      <greatgrandchild name="name111"/>
      <greatgrandchild name="name112"/>
    </grandchild>
    <grandchild name="name12"/>
  </child>
  <child name="name2">
    <grandchild name="name21"/>
    <grandchild name="name22"/>
  </child>
</root>

Обратите внимание, что это серия элементов одного типа с атрибутами и дочерними элементами. В w3schools есть хороший набор учебников по xml. ком.

Если бы вы могли поместить свои данные в какой-то правильный XML, вы, вероятно, могли бы отображать данные по своему усмотрению очень легко. Вы можете использовать поставщики данных XML и напрямую связываться с XML, вы можете использовать сериализацию XML, чтобы легко загружать ваши данные в серию объектов и коллекций, вы можете загрузить их в XmlDocument и манипулировать ими таким же образом. Если вы пишете этот XML самостоятельно, то, вероятно, вы потратите меньше времени на переформатирование данных, чем пытаетесь найти способ вставить свой странный XML в вашу программу.

После того, как вы исправите свой XML, вот еще один пост с похожим вопросом Заполнить сетку данных или просмотр списка из файла XML .

...