Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将分层xml绑定到treeview_C#_Winforms_Linq_Treeview - Fatal编程技术网

C# 将分层xml绑定到treeview

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

我有一个标准的.NET3.5WinForms项目。上面有一个树景。我已经使用XmlSerializer和相关类将一个列表实例序列化为XML,以拥有一个分层XML文件

现在,我需要将这个XML文件绑定到treeview以显示它的所有节点/元素(父节点、子节点等)

是否有一个方便的方法(LINQ或非LINQ),而不必解析XML等


谢谢

您必须手动操作

以下是来自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 };
    }
}