Linq to Xml to Datagridview - PullRequest
       25

Linq to Xml to Datagridview

3 голосов
/ 14 апреля 2010

Точно, начинаю сходить с ума здесь. У меня есть следующий код:

var query = (from c in db.Descendants("Customer")
                             select c.Elements());
                dgvEditCusts.DataSource = query.ToList();

Здесь db относится к вызову XDocument.Load. Как я могу получить данные в DataGridView?

Просто подумал, что я должен упомянуть: он возвращает полностью пустое значение.

Не то, чтобы XML имел большое значение, но вот пример:

<Root>
  <Customer>
    <CustomerNumber>1</CustomerNumber>
    <EntryDate>2010-04-13T21:59:46.4642+01:00</EntryDate>
    <Name>Customer Name</Name>
    <Address>Address</Address>
    <PostCode1>AB1</PostCode1>
    <PostCode2>2XY</PostCode2>
    <TelephoneNumber>0123456789</TelephoneNumber>
    <MobileNumber>0123456789</MobileNumber>
    <AlternativeNumber></AlternativeNumber>
    <EmailAddress>email@address.com</EmailAddress>
  </Customer>
</Root>

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Ах, неважно, в конце концов я выработал ответ на свой вопрос Вот код для всех, у кого может быть эта проблема:

var query = from c in db.Descendants("Customer")
                            select new
                            {
                                CustomerNumber = Convert.ToInt32((string)c.Element("CustomerNumber").Value),
                                Name = (string)c.Element("Name").Value,
                                Address = (string)c.Element("Address").Value,
                                Postcode = (string)c.Element("PostCode1").Value + " " + c.Element("PostCode2").Value
                            };
                dgvEditCusts.DataSource = query.ToList();
1 голос
/ 14 апреля 2010

Когда вы звоните db.Descendants("Customer"), вы возвращаете ТОЛЬКО элементы с именем Customer. НЕ это дети. См. Документы MSDN .

Поэтому, когда вы звоните c.Elements(), он пытается получить дочерние элементы Заказчика, которые не существуют, т.к. они были отфильтрованы.

Я думаю, что это может сработать, если вы отмените фильтрацию Customer.

...