如何在C#中动态地将子子节点添加到Treeview中的子节点?

时间:2013-09-06 04:10:28

标签: c# treeview parent-child

我尝试根据列表添加树视图。我的范围超出范围。

for (int i = MyList.Count; i > 0 ; i--)
{
 MyTree.Nodes.Add(MyList[i].GetP() + " " + MyList[i].GetSt());
 MyTree.Nodes[i].Nodes.Add(MyList[i].GetSe());
 MyTree.Nodes[i].Nodes[i].Nodes.Add(MyList[i].GetI());
}

能够使用硬编码值填充树视图。即,

MyTree.Nodes[0].Nodes[0].Nodes.Add(MyList[0].GetI());

请帮我解决此异常。

其他详细信息:

我试过

MyTree.Nodes[1].Nodes[1].Nodes.Add(MyList[1].GetI());

显示例外情况。

2 个答案:

答案 0 :(得分:0)

您的循环似乎存在一些问题

  1. int i = MyList.Count将比最大索引大1 MyList
  2. 然后,当只有1个项目存在时,您尝试访问MyTree.Nodes[i]
  3. 尝试使用++循环代替--

    for (int i = 0; i < MyList.Count; i++)
    {
         MyTree.Nodes.Add(MyList[i].GetP() + " " + MyList[i].GetSt());
         MyTree.Nodes[i].Nodes.Add(MyList[i].GetSe());
         MyTree.Nodes[i].Nodes[i].Nodes.Add(MyList[i].GetI());
    }
    

答案 1 :(得分:0)

我遇到了同样的问题,花了好几个小时后找到了一个更好,更简单的方法。

假设您有以下设置。

Treeview table

,代码在

下面
protected void load_data()
    {

        string sql_text = "select * from category_master where parent_category_code = 0"; //only root categories

        SqlConnection connection = new SqlConnection(conStr);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = sql_text;
        cmd.Connection = connection;
        connection.Open();

        SqlDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            string cat_code = rdr["category_code"].ToString();
            string cat_name = rdr["category_name"].ToString();

            TreeNode parent = new TreeNode();
            parent.Value = cat_code;
            parent.Text = cat_name;
            tw.Nodes.Add(parent);

            add_childs(parent, cat_code);

        }

        connection.Close();

    }


 protected void add_childs(TreeNode tn, string category_code)
    { 

        string sql_text = "select * from category_master where parent_category_code = @category_code"; 

        SqlConnection connection = new SqlConnection(conStr);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = sql_text;
        cmd.Parameters.AddWithValue("@category_code", category_code);
        cmd.Connection = connection;
        connection.Open();

        SqlDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            string  cat_code = rdr["category_code"].ToString();
            string cat_name = rdr["category_name"].ToString();

            TreeNode child = new TreeNode();
            child.Value = cat_code;
            child.Text = cat_name;
            tn.ChildNodes.Add(child);

            add_childs(child, cat_code); //calling the same function
        }

        connection.Close();

    }

,输出

enter image description here