将分层xml绑定到treeview

时间:2011-03-25 20:21:08

标签: c# winforms linq treeview

我有一个标准的.NET 3.5 winforms项目。在它上面,它有一个树视图。我已经使用XmlSerializer和相关类将List实例序列化为XML,以获得分层XML文件。

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

是否可以方便地执行此操作(LINQ与否),而无需解析XML等?

由于

2 个答案:

答案 0 :(得分: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 };
    }
}

答案 1 :(得分:2)

你必须手动完成。

以下是微软的一个例子:

http://support.microsoft.com/kb/317597