Заполните WPF DataGrid неизвестным количеством данных из XML - PullRequest
0 голосов
/ 19 октября 2011

Я пытаюсь прочитать все атрибуты в элементах «Данные» из XML-файла и отобразить их в DataGrid (WPF, .Net 4.0)

XML в формате, показанном ниже.

<root>
  <Data Name1="Value1" Name2="Value2" ... />
  <Data Name1="Value1" Name2="Value2" ... />
  ...
</root>

Я не имею представления об использованных именах атрибутов (например, Name1, Name2, Foo и т. Д.) Или количестве атрибутов в каждом элементе (потенциально различное количество атрибутов для каждого элемента). Каждый новый элемент должен отображаться в новой строке, а каждый атрибут соответствует столбцу (если он не существует для этой строки, отображать ноль).

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

Моя текущая попытка - создать набор текстовых столбцов (учитывая список имен столбцов для использования на основе того, что я извлек из XML-файла)

List<string> dataTags = ...; //get list of attributes to use from xml
foreach (string d in dataTags) {
    DataGridTextColumn col = new DataGridTextColumn();
    col.Header = d;
    dataGrid.Columns.Add(col);
}

Затем я перебираю каждый атрибут и добавляю его в список (для представления строки, отображаемой в сетке данных), если имя атрибута соответствует одному из значений заголовка

foreach (XElement e in xml.Descendants("Data")) {
    //Store values to be added to the datagrid as a new row
    List<string> row = new List<string>();

    //Only add data where the attribute name matches one of the 'dataTags' we are given.
    foreach(string d in dataTags) {
        foreach (XAttribute a in e.Attributes()) {
            if (d.Equals(a.Name.ToString())) {
                row.Add(a.Value);
                break;
            }
        }
    }

    //Add new row to the datagrid
    dgData.Items.Add(row);
}

Я в некотором роде ... но у меня есть сетка данных с пустыми строками (правильное количество строк, но теперь отображаются данные).

Буду признателен за любые советы / указатели.

1 Ответ

0 голосов
/ 19 октября 2011

Ваш код для динамического создания столбцов верен.

Но ваш код для добавления элементов в сетку данных неверен.Для этого, пока вы настраиваете свои столбцы, присвойте им XPATH.

  List<string> dataTags = ...; //get list of attributes to use from xml 
  foreach (string d in dataTags)
  {
         DataGridTextColumn col = new DataGridTextColumn();
         col.Binding = new Binding() { XPath = "@" + d } ;
         col.Header = d;
         dataGrid.Columns.Add(col);
  } 

, а затем назначьте ваши XmlNodes как ItemsSource для сетки данных ...

  dataGrid.ItemsSource = xml.Descendants("Data");

Также есть эта статья, в которой используется XmlDataProvider

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...