2011-03-25 43 views
5

我有一个标准的.NET 3.5 winforms项目。在它上面,它有一个树形视图。我已经使用XmlSerializer和相关的类将List实例序列化为XML,以创建分层的XML文件。将层次结构xml绑定到树视图

现在,我需要将此XML文件绑定到树视图以显示其所有节点/元素(父母,子女等)。

有没有方便的做到这一点(LINQ或不),而无需解析XML等?

谢谢

+0

不的XmlDataSource做到这一点? – 2011-03-25 20:55:59

回答

13

并不需要解析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 }; 
} 

而且在TreeNodeEx

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 }; 
    } 
}