【问题标题】:C# DataGridView binding to subset of XMLC# DataGridView 绑定到 XML 的子集
【发布时间】:2009-08-25 09:04:34
【问题描述】:

我需要有条件地填充 DataGridView。数据来自一个 XML 文件,例如

<?xml version="1.0" standalone="yes"?>
<people>
  <person>
    <name>Bob</name>
    <dogs>
      <dog><name>Rover</name></dog>
      <dog><name>Rex</name></dog>
    </dogs>
  </person>
  <person>
    <name>Jim</name>
    <dogs>
      <dog><name>Duke</name></dog>
      <dog><name>Colin</name></dog>
      <dog><name>Gnasher</name></dog>
    </dogs>
  </person>
</people>

如果我使用以下代码,我可以在 DataGridView 中显示所有狗 - 但我需要将列表限制为特定人拥有的那些。

DataSet ds = new DataSet();
ds.ReadXml("data.xml");

dataGridView1.DataSource = ds;
dataGridView1.DataMember = "dog";

我该怎么做?

谢谢 斯图尔特

【问题讨论】:

    标签: c# xml datagridview hierarchy subset


    【解决方案1】:

    您可以使用以下代码获取 XElements:

    var xml = XDocument.Load(filePath);
    
    var people = xml.Elements("people").Elements("person");
    var dogElements = people.Elements("dogs").Elements("dog").Where(p => p.Parent.Parent.Element("name").Value == "Bob");
    
    var dogs = dogElements.Select(d => new {Name = d.Element("name").Value, Owner = d.Parent.Parent.Element("name").Value});
    
    dataGridView1.DataSource = dogs;
    dataGridView1.DataMember = "Name";
    

    作为一个例子,我在这里也选择了狗的主人。

    您必须添加对 System.Xml 和 System.Xml.Linq 的引用

    【讨论】:

    • 嗯...以前没有玩过 Linq。我会放手的。谢谢!
    • 我终于开始尝试这个了!但我在最后一行(设置 DataMember 时)遇到问题:“无法创建字段名称的子列表。”你能给我一个指针吗?提前致谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多