我在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
是我如何通过汽车模型搜索,例如“本田”。
查询后显示:
但我希望显示指定车辆元素的所有后代,例如奥迪只显示奥迪数据,这样:
答案 0 :(得分:1)
结果是预期的,因为您正在选择Key.value
。如果要获得所需的显示,则应将结果包装在对象中:
var query = from key in xdoc.Descendants("Vehicle") where key != null && (key.Element("Make").Value == "Honda") select new { Make = key.Element("Make").Value, Model = key.Element("Model").Value };
答案 1 :(得分: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'";