【发布时间】:2010-12-15 19:11:47
【问题描述】:
我有一个类似于以下格式的 XML 数据文件:
<?xml version="1.0" standalone="yes"?>
<Root>
<FirstLevel Id="1">
<SecondLevel Id="1">
<ThirdLevel Id="1">
<DataElement Id="1" Data="hello" />
<DataElement Id="2" Data="world" />
</ThirdLevel>
<ThirdLevel Id="2">
<DataElement Id="1" Data="blablabla" />
<DataElement Id="2" Data="blablabla" />
</ThirdLevel>
</SecondLevel>
<SecondLevel Id="2">
<ThirdLevel Id="1">
<DataElement Id="1" Data="asdf" />
<DataElement Id="2" Data="qwerty" />
</ThirdLevel>
<ThirdLevel Id="2">
<DataElement Id="1" Data="gggggg" />
<DataElement Id="2" Data="dddddd" />
</ThirdLevel>
</SecondLevel>
</FirstLevel>
</Root>
我正在尝试使用绑定到此 XML 文件的 DataGridView 创建一个 WinForms 应用程序。并在网格中显示以下内容,具体取决于所选的导航参数。例如,如果用户选择所有 Id 为 1 的 FirstLevel、SecondLevel 和 ThirdLevel 导航,则应仅显示以下 2 行,并能够写回对 XML 的任何更改:
Id Data
----------
1 hello
2 world
到目前为止,我只能显示所有行(数据表):
Id Data
---------
1 hello
2 world
1 blablabla
2 blablabla
1 asdf
2 qwerty
... etc
使用以下代码:
DataSet dataSet = new DataSet();
dataSet.ReadXML("Data.xml");
DataView dataView = new DataView(dataSet.Tables["DataElement"]);
BindingSource source = new BindingSource();
source.DataSource = dataView;
dataGridView1.DataSource = source;
如上所述,我如何过滤我的数据以便只显示 2 行?谢谢!
更新:
感谢康拉德的帮助!但是,我仍在尝试弄清楚如何在这三个级别之间“导航”,因为添加 DataMember 并不能完全添加过滤。因此,为了能够显示 FirstLevel Id = 2、SecondLevel Id = 1、ThirdLevel Id = 5(或其他)标准的数据,我是否必须将所有三个添加到:
DataView dataView = new DataView(dataSet.Tables["FirstLevel_SecondLevel_ThirdLevel"]);
然后添加 RowFilter 类似:
dataView.RowFilter = "Id = '2'";
(但是这里的其他级别呢?)
然后修改DataMember如下:
source.DataMember = "FirstLevel_SecondLevel_ThirdLevel_DataElement";
它还不太适合我。我真的只是在逆流而上,这不是在 WinForms 中编辑 XML 数据的方式吗?谢谢!
【问题讨论】:
标签: c# xml winforms datagridview