LINQ查询不会加载到数据网格中

时间:2013-10-21 14:08:40

标签: c# .net linq

我想将XML加载到DataGridView中,并将datagridview中的更改与XML文件(CRUD)相关联。我尝试了各种方法,我试图找到最好的方法,我已经正确加载和显示XML并通过遍历整个DataGridView并创建一个新的XML文档来保存更改,但这需要大量的处理。我怎样才能以更简单的方式做到这一点? 我正在考虑将XML文件加载到XDocument中的内存中,并在Edit_EventHandler上操作DataGridView上的更改,这样当我想保存更改时,我不必再次解析整个GridView。我尝试过使用LINQ,但查询没有加载到DataGridView:

string path = @"D:\WorkData\users.xml";

xmlDoc = XDocument.Load(path);
var q = from item in xmlDoc.Descendants("client")
        select new
        {
            Name = item.Element("ID").Value,
            Mail = item.Element("email").Value
        };

dataGridView1.DataSource = q.ToList();

和XML:

<?xml version='1.0'?>
<clients>
  <client ID='0000100000' email='email0@mail.com'/>
  <client ID='0000100001' email='email1@mail.com'/> 
</clients>

2 个答案:

答案 0 :(得分:1)

您要访问的是属性而不是元素。您的查询可能会抛出异常,至少它不会返回您GridView中没有看到任何内容的结果。使用以下查询获取Attribute值。

var q = from item in xmlDoc.Descendants("client")
        select new
        {
            Name = item.Attribute("ID").Value,
            Mail = item.Attribute("email").Value
        };

答案 1 :(得分:1)

ID和电子邮件属性不是元素!

var q = from item in xmlDoc.Descendants("client")
        select new
        {
            Name = item.Attribute("ID").Value,
            Mail = item.Attribute("email").Value
        };