how to populate treeview?

前端 未结 3 1044
醉酒成梦
醉酒成梦 2021-01-24 18:59

I have a table \"Category\".It is simply a table of users, where each are identified with a unique UserId and have a corresponding ParentId (pointing to their boss\' UserId). I

3条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-24 19:29

    If you mean WinForms treeview I would do something like this (error checking skipped):

    private void FillTreeView(object sender, EventArgs e)
    {
        // create fake datatable
        DataTable dt = new DataTable();
        dt.Columns.Add("UserId",typeof(int));
        dt.Columns.Add("Name",typeof(string));
        dt.Columns.Add("ParentId", typeof(int));
    
    
        dt.Rows.Add(new object[] { 3, "Level_1_A", 2 });
        dt.Rows.Add(new object[] { 4, "Level_1_B", 2 });
        dt.Rows.Add(new object[] { 2, "Level_0_A", 0 });
        dt.Rows.Add(new object[] { 5, "Level_2_A", 3 });
        dt.Rows.Add(new object[] { 6, "Level_2_B", 3 });
        dt.Rows.Add(new object[] { 7, "Level_0_B", 0 });
        dt.Rows.Add(new object[] { 8, "Level_1_C", 7 });
    
        // call recursive function
        AddCurrentChild(0, dt, treeView1.Nodes);
    }
    
    private static void AddCurrentChild(int parentId, DataTable dt, TreeNodeCollection nodes)
    {
        var rows = dt.Select("ParentId = " + parentId);
        foreach (var row in rows)
        {
            var userId = (int) row["UserId"];
            var name = row["Name"] as string;
    
            var node = nodes.Add(userId.ToString(), name.ToString());
            node.Tag = row; // if you need to keep a row reference on the node
            AddCurrentChild(userId, dt, node.Nodes);
        }
    }
    

提交回复
热议问题