【问题标题】:Display specific xml data in DataGridView在 DataGridView 中显示特定的 xml 数据
【发布时间】:2018-04-05 11:34:27
【问题描述】:

我在 C# 中创建了一个 WinForm,现在我想显示我的 XML 文件的选定数据以显示在 DataGridView 中。我发现一些链接有助于在 DataGridView 中显示所选元素,但它没有按应有的方式显示。

以下是我的 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Vehicle>
    <Number_Plate>PHZ-888</Number_Plate>
    <Make>Honda</Make>
    <Model>City</Model>
    <Year>2008</Year>
  </Vehicle>
  <Vehicle>
    <Number_Plate>VGQ-141</Number_Plate>
    <Make>Suzuki</Make>
    <Model>Mehran</Model>
    <Year>2001</Year>
  </Vehicle>
  <Vehicle>
    <Number_Plate>VZH-403</Number_Plate>
    <Make>Audi</Make>
    <Model>A7</Model>
    <Year>2008</Year>
  </Vehicle>

  <Vehicle>
    <Number_Plate>BCH-184</Number_Plate>
    <Make>Honda</Make>
    <Model>Accord CL9</Model>
    <Year>2007</Year>
  </Vehicle>
</root>

这是我试图用来获取特定元素的查询:

XDocument xdoc = XDocument.Load("vehicle20.xml");

var query = from key in xdoc.Descendants("Vehicle")
            where key != null && (key.Element("Make").Value == makelist)
            select key.Value;
dataGridView1.DataSource = query.ToList();

makelist是我通过车型来搜索的方式,比如“Honda”。

查询后显示如下:

但我想显示指定车辆元素的所有后代,比如奥迪只显示奥迪数据,这样:

【问题讨论】:

  • 我认为你想使用“select key”而不是“select key.Value”。

标签: c# xml winforms data-binding datagridview


【解决方案1】:

作为一个选项,您可以将 xml 数据加载到 DataSet 并以这种方式在 DataGridView 中显示:

var ds = new DataSet();
ds.ReadXml("path to the xml file");
dataGridView1.DataSource = ds.Tables[0]; //ds.Tables[Vehicle]

然后要过滤数据并显示一些特定的行,您可以这样应用过滤器:

ds.Tables[0].DefaultView.RowFilter = "Make='Honda'";

【讨论】:

    【解决方案2】:

    结果是预期的,因为您选择的是Key.value。如果您想获得所需的显示,您应该将结果包装在一个对象中:

    var query = from key in xdoc.Descendants("Vehicle")
              其中 key != null && (key.Element("Make").Value == "Honda")
              选择新的
              {
                 Make = key.Element("Make").Value,
                 模型 = key.Element("Model").Value
              };

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多