2011-03-25 46 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 }; 
    } 
}