Node
次のプロパティを持つ C#のクラスがあります。
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);
新しい子ノードを追加したい場合は、2 番目の方法を使用する必要があります。それ以外の場合は最初の方法です。両方とも type のオブジェクトを返しますTreeNode
。
ルート ノードがParentId = null
.
これは私がこれまでに行ったことです:
// 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);
}
}