读书人

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

发布时间: 2013-10-04 21:41:43 作者: rapoo

根据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);
}
}
}

读书人网 >C#

热点推荐