Linq to Xml到Datagridview

3

好的,我开始有点疯狂了。我有以下代码:

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

在这里,db指的是XDocument.Load调用。我该如何将数据放入DataGridView中?

只是想提一下:它返回一个完全空白的dgv。

虽然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>

请提供一个 XML 示例。 - David Hall
2个回答

1
当您调用db.Descendants("Customer")时,您仅返回具有名称Customer的元素。而不是它的子元素。请参见MSDN文档
因此,当您调用c.Elements()时,它正在尝试获取客户的子元素,但这些元素不存在,因为它们已被过滤掉了。
我认为如果您放弃Customer过滤,它可能会起作用。

1
啊,没关系,我最终想到了自己问题的答案。以下是代码,供其他可能遇到这个问题的人参考:
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();

刚想发同样的内容 :) 我注意到的一件事是,我无法解释的是,.Elements() 查询的 ToList 返回一个 XContainer.GetElements() 对象,因此似乎 .ToList() 没有像人们期望的那样实现数据。很高兴你解决了这个问题。 - David Hall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接