ASP.NET中的递归TreeView

waq*_*med 11 c# asp.net treeview recursion

我有一个类型列表的对象,我希望用它来填充asp.net c#中的树视图.

每个对象项都有:

id | Name | ParentId
Run Code Online (Sandbox Code Playgroud)

例如:

id | Name     | ParentId
-------------------------
1  | Alice    | 0
2  | Bob      | 1
3  | Charlie  | 1
4  | David    | 2
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,父母将是Alice,有两个孩子Bob和Charlie.大卫是鲍勃的孩子.

我尝试在c#ASP.NET中递归地动态填充树视图时遇到了很多问题

有没有人有一个简单的解决方案?

顺便说一句:您可以使用People.Id,People.Name和People.ParentId来访问成员,因为它是属于list的对象.

到目前为止,我可以发布我的代码(许多尝试),但不确定它会有多大用处.

Mat*_*ing 27

我认为这应该让你开始.我创建了一个MyObject类来模仿你的对象.

public class MyObject
{
    public int Id;
    public int ParentId;
    public string Name;
}
Run Code Online (Sandbox Code Playgroud)

这是一种基于列表recursivley添加树视图节点的方法.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<MyObject> list = new List<MyObject>();
        list.Add(new MyObject(){Id=1, Name="Alice", ParentId=0});
        list.Add(new MyObject(){Id=2, Name="Bob", ParentId=1});
        list.Add(new MyObject(){Id=3, Name="Charlie", ParentId=1});
        list.Add(new MyObject(){Id=4, Name="David", ParentId=2});            

        BindTree(list, null);            
    }
}

private void BindTree(IEnumerable<MyObject> list, TreeNode parentNode)
{
    var nodes = list.Where(x => parentNode == null ? x.ParentId == 0 : x.ParentId == int.Parse(parentNode.Value));
    foreach (var node in nodes)
    {
        TreeNode newNode = new TreeNode(node.Name, node.Id.ToString());
        if (parentNode == null)
        {
            treeView1.Nodes.Add(newNode);
        }
        else
        {
            parentNode.ChildNodes.Add(newNode);
        }
        BindTree(list, newNode);
    }
}
Run Code Online (Sandbox Code Playgroud)