Заполните DataGridView из выбранного XML-элемента, используя LINQ - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу отобразить список элементов в datagridview winforms. Элементы из файлов XML выглядят следующим образом.

GetLotDetails.xml

Все <Field></Field> нужны только с <Document name="DATA">. Я пытался использовать LINQ для их отображения, но он возвращает только первый <Field> узел.

Текущие коды, которые я сделал: -

XElement doc = XElement.Load("GetLotDetails.xml");
var data = doc.Descendants("Document")
           .Where(x => (String)x.Attribute("name") == "DATA");

var query = from d in data
            select new
            {
              Name = (String)d.Element("Field").Attribute("name").Value,
              Type = "String",
              Value = (String)d.Element("Field").Value,
            };
var listQ = query.ToList();
dataGridView1.DataSource = query.ToList();

Может кто-нибудь помочь мне объяснить, почему другие узлы в <Document name="DATA"> не отображаются вместе? Что я могу сделать, чтобы изменить код?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Ваш метод LINQ возвращает только один узел документа. и Ваш запрос LINQ выбирает первый атрибут элемента и значение. SelectMany поможет вам получить дочерние узлы.

        var data = doc.Descendants("Document")
                   .Where(x => (String)x.Attribute("name") == "DATA")
                   .SelectMany(x => x.Elements("Field"));

        var query = from d in data
                    select new
                    {
                        Name = d.Attribute("name").Value,
                        Type = "String",
                        Value = d.Value,
                    };
0 голосов
/ 01 ноября 2018
var listQ = query.ToList();

foreach (var item in listQ)
{
    dataGridView1.DataSource = query.ToList();
}

Почему вы назначаете DataSource внутри цикла foreach? Это можно сделать вне цикла.

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