0

我正在尝试根据列表添加树视图。我得到一个超出范围的异常。

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());
}

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

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

请帮我解决这个异常。

额外细节:

我试过了

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

它显示异常。

4

2 回答 2

0

你的循环似乎有一些问题

  1. int i = MyList.Count将比最大索引大 1 MyList
  2. MyTree.Nodes[i]然后您在仅存在 1 个项目时尝试访问

尝试使用++循环而不是--

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());
}
于 2013-09-06T04:19:30.837 回答
0

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

假设您有以下设置。

树视图表

代码如下

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();

    }

输出是

在此处输入图像描述

于 2016-02-02T00:04:00.900 回答