У меня есть файл данных 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>
И я пытаюсь создать приложение WinForms, используя DataGridView, который связывается с этим файлом XML.И отображает следующее в сетке, в зависимости от выбранных параметров навигации.Например, если пользователь выбирает навигацию по FirstLevel, SecondLevel и ThirdLevel с идентификатором 1 для всех, должны отображаться только следующие 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";
Это непока не работает для меня.Я действительно просто иду против течения здесь, и это не то, как следует подходить к редактированию данных XML в WinForms?Спасибо!