我想在winforms的datagridview中显示项目列表。这些项目来自如下所示的XML文件。
仅需要<Field></Field>
中的所有<Document name="DATA">
。我尝试使用LINQ显示它们,但它仅返回第一个<Field>
节点。
我已经完成的当前代码:-
XElement doc = XElement.Load("GetLotDetails.xml");
var data = doc.Descendants("Document")
.Where(x => (String)x.Attribute("name") == "DATA");
var query = from d in data
select new
{
Name = (String)d.Element("Field").Attribute("name").Value,
Type = "String",
Value = (String)d.Element("Field").Value,
};
var listQ = query.ToList();
dataGridView1.DataSource = query.ToList();
有人可以帮我解释一下为什么<Document name="DATA">
下的其他节点不能一起显示吗?我该怎么做才能修改代码?
答案 0 :(得分:0)
var listQ = query.ToList();
foreach (var item in listQ)
{
dataGridView1.DataSource = query.ToList();
}
为什么要在foreach循环内分配DataSource?这可以在循环外完成。
答案 1 :(得分:0)
您的LINQ方法仅返回一个文档节点。并且您的LINQ查询正在选择第一个元素属性和值。 SelectMany将帮助您获取子节点。
var data = doc.Descendants("Document")
.Where(x => (String)x.Attribute("name") == "DATA")
.SelectMany(x => x.Elements("Field"));
var query = from d in data
select new
{
Name = d.Attribute("name").Value,
Type = "String",
Value = d.Value,
};