C# 将分层xml绑定到treeview
我有一个标准的.NET3.5WinForms项目。上面有一个树景。我已经使用XmlSerializer和相关类将一个列表实例序列化为XML,以拥有一个分层XML文件 现在,我需要将这个XML文件绑定到treeview以显示它的所有节点/元素(父节点、子节点等) 是否有一个方便的方法(LINQ或非LINQ),而不必解析XML等C# 将分层xml绑定到treeview,c#,winforms,linq,treeview,C#,Winforms,Linq,Treeview,我有一个标准的.NET3.5WinForms项目。上面有一个树景。我已经使用XmlSerializer和相关类将一个列表实例序列化为XML,以拥有一个分层XML文件 现在,我需要将这个XML文件绑定到treeview以显示它的所有节点/元素(父节点、子节点等) 是否有一个方便的方法(LINQ或非LINQ),而不必解析XML等 谢谢您必须手动操作 以下是来自Microsoft的一个示例: 不需要解析XML就可以将其内容绑定到TreeView的解决方案是不存在的(当然,如果它在内部退出,则会解析XM
谢谢您必须手动操作 以下是来自Microsoft的一个示例:
不需要解析XML就可以将其内容绑定到
TreeView
的解决方案是不存在的(当然,如果它在内部退出,则会解析XML)
无论如何,您可以使用LINQ to XML自己实现这一点:
private void Form1_Load(object sender, EventArgs e)
{
var doc = XDocument.Load("data.xml");
var root = doc.Root;
var x = GetNodes(new TreeNode(root.Name.LocalName), root).ToArray();
treeView1.Nodes.AddRange(x);
}
private IEnumerable<TreeNode> GetNodes(TreeNode node, XElement element)
{
return element.HasElements ?
node.AddRange(from item in element.Elements()
let tree = new TreeNode(item.Name.LocalName)
from newNode in GetNodes(tree, item)
select newNode)
:
new[] { node };
}
XMLDataSource不是这样做的吗?
public static class TreeNodeEx
{
public static IEnumerable<TreeNode> AddRange(this TreeNode collection, IEnumerable<TreeNode> nodes)
{
var items = nodes.ToArray();
collection.Nodes.AddRange(items);
return new[] { collection };
}
}