我有在C#Node
类具有以下属性:递归树生成
public class Node
{
public int Id {get;set;}
public int? ParentId {get;set;}
public string Label {get;set;}
}
我有一个TreeView
控制,其提供了以下的方法来创建 一个新的节点:
MyTreeView.CreateNode(key, label);
parent.Nodes.CreateNode(key, label);
如果我想添加一个新的子节点,我需要使用第二种方法,否则使用第一种方法。两者都返回TreeNode
类型的对象。
考虑到根节点有ParentId = null
,你将如何在C#中创建一个递归函数来填充树视图?
这是我迄今所做的:
// create a list of root nodes
var roots = myList.Where(x => x.ParentId == null);
// send the roots to a recursive func
foreach(var root in roots)
{
AddNode(null,root,myList);
}
这是我的递归函数:
private void AddNode(Node parent, Node current, IList<Node> items)
{
TreeNode treenode = null;
if(parent == null)
{
treenode = mytree.CreateNode(current.Id.ToString(), current.Label);
}else{
var parentnode = mytree.GetNode(parent.Id.ToString());
treenode = parentnode.Nodes.CreateNode(current.Id.ToString(), current.Label);
}
// call the recursion for the children
var children = items.Where(x => x.ParentId == current.Id);
foreach(var child in children)
{
AddNode(current, child, items);
}
}
您需要添加C#标签。如果这是作业,则还应该添加作业标签。另外,您应该向我们展示您尝试过的代码示例。 – JamieSee 2012-07-06 15:02:45
好的,我会修改帖子,谢谢。 – Raffaeu 2012-07-06 15:03:46
这个功能有什么问题?除了你不需要变量的事实treenode – 2012-07-06 16:32:26