首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

根据Treenode全路径怎么生成完整的Treeview树

2013-10-04 
根据Treenode全路径如何生成完整的Treeview树?根据数据库中保存的几个节点路径,要在Winform界面上的Treevi

根据Treenode全路径如何生成完整的Treeview树?
根据数据库中保存的几个节点路径,要在Winform界面上的Treeview上显示完整的树。
保存的数据类似:
Flowmaster
Flowmaster\\network1
Flowmaster\\network2
Flowmaster\\project1
Flowmaster\\project1\\network3
Flowmaster\\project2
Flowmaster\\project2\\network4

要形成的树结构:
Flowmaster
  network1
  network2
  project1
     network3
  project2
     network4

憋了半天这个算法都么弄出来,各位帮忙看下根据Treenode全路径怎么生成完整的Treeview树 Treenode
[解决办法]


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        SetupControls();
    }

    public void SetupControls()
    {
        string[] data =
        {
            "Flowmaster",
            "Flowmaster\\network1",
            "Flowmaster\\network2",
            "Flowmaster\\project1",
            "Flowmaster\\project1\\network3",
            "Flowmaster\\project2",
            "Flowmaster\\project2\\network4"
        };
        CreateTree(data);
    }
    public void CreateTree(string[] data)
    {
        string[] roots = data.Select(a => a.Split('\\')[0]).Distinct().ToArray();
        foreach (string path in roots)
        {
            TreeNode root = new TreeNode();
            root.Text = path;
            root.Name = path;
            CreateSubTree(data, root);
            treeView1.Nodes.Add(root);
        }
    }
    public void CreateSubTree(string[] data, TreeNode parent)
    {
        string[] childs =data.
                            Where(a => a.IndexOf(parent.Name) == 0 && a != parent.Name).
                            Select(a=>a.Remove(0,a.IndexOf('\\')+1)).ToArray();
        string[] roots = childs.Select(a => a.Split('\\')[0]).Distinct().ToArray();
        foreach (string childnode in roots)
        {
            TreeNode node = new TreeNode();
            node.Text = childnode;
            node.Name = childnode;
            CreateSubTree(childs, node);
            parent.Nodes.Add(node);
        }
    }
}

热点排行