使用DataGrid显示分层XML数据

时间:2009-07-19 07:15:18

标签: wpf templates datagrid grid

我有一个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 个答案:

答案 0 :(得分:1)

如Ben所述清理XML之后 - 我发现处理分层XML数据的最简单方法是将其加载到DataSet对象(DataSet.ReadXML())。

然后,您可以将DataSet和您想要的特定DataTable绑定到网格控件。

答案 1 :(得分:0)

这真的不是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后,这是另一篇类似问题Fill datagrid or listview from XML file的帖子。