如何在c#中创建动态树视图?

时间:2012-09-21 07:02:25

标签: c# xml dynamic treeview

我正在研究一个系统,我有一个必须包含项目结构的树视图 来自物体。 这个结构看起来像这样:

Project
 |- Module1
 |    |- Xml1
 |    |    |- Element
 |    |    |- Element
 |    |    |    |- Element
 |    |    |    |- Element
 |    |    |    |    |- Element
 |    |    |    |
 |    |    |    |- Element
 |    |    |
 |    |    |- Element
 |    |
 |    |- Xml2
 |         |- Element
 |
 |- Module2
      |- Xml1
           |- Element

等。

现在,当我想将一个Xml文件添加到模块时,它很容易,因为我知道它有 它上面有2个节点。 (项目,模块) 在c#:

public void AddXmlToTree(string xmlFile)
{
     projectTreeView.Nodes[0].LastNode.Nodes.Add(xmlFile);
}

注意:我正在使用LastNode,因为我按照树的顺序添加它们。

现在问题: 每个元素都可以有另一个元素,所以它基本上是无限的。 我不能只制作一百万个这样的方法。 我需要一些其他东西,这可能是一些递归方法。

我想我需要获取最后添加的Element对象的Node 我可以添加下一个元素节点,我只是不知道如何得到它。

我希望你能理解我的问题。

1 个答案:

答案 0 :(得分:0)

根本没有测试,但可以用作方向:

private void AddNodesRecursive(TreeNode parent, object childData)
{
    string strChildNode = string.Empty;
    XmlElement childDoc = null;
    if (parent != null)
    {
        if ((childData as string) != null)
        {
            parent.ChildNodes.Add(new TreeNode((childData as string)));
            return;
        }
        childDoc = childData as XmlElement;
        if (childDoc != null)
        {
            TreeNode subParent = new TreeNode(childDoc.InnerText);
            parent.ChildNodes.Add(subParent);
            foreach (XmlElement grandChild in childDoc.ChildNodes)
                AddNodesRecursive(subParent, grandChild);
        }
    }
}