如上图:三个表,循环生成树。下面是主要的循环代码。但是编译的时候报错:制定的参数超出有效值,参数名:index请高人指教!
try
            {
                for (int i = 0; i < ds.Tables["OneTree"].Rows.Count; i++)
                {
                    this.DPeiTView.Nodes.Add("" + ds.Tables["OneTree"].Rows[i][0].ToString() + "");
                    for (int j = 0; j < ds.Tables["TwoTree"].Rows.Count; j++)
                    {
                        if (ds.Tables["TwoTree"].Rows[j][0].ToString() == ds.Tables["OneTree"].Rows[i][0].ToString())
                        {
                            this.DPeiTView.Nodes[i].Nodes.Add("" + ds.Tables["TwoTree"].Rows[j][1].ToString() + "");
                            for (int k = 0; k < ds.Tables["ThreeTree"].Rows.Count; k++)
                            {
                                if ((ds.Tables["ThreeTree"].Rows[k][0].ToString() == ds.Tables["TwoTree"].Rows[j][0].ToString()) && (ds.Tables["ThreeTree"].Rows[k][1].ToString() == ds.Tables["TwoTree"].Rows[j][1].ToString()))
                                {
                                    this.DPeiTView.Nodes[i].Nodes[j].Nodes.Add("" + ds.Tables["ThreeTree"].Rows[k][2].ToString() + "");
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

解决方案 »

  1.   

    改:
    for (int i = 0; i < ds.Tables["OneTree"].Rows.Count; i++)
      {
      this.DPeiTView.Nodes.Add("" + ds.Tables["OneTree"].Rows[i][0].ToString() + "");为中部分为
    var iNode = this.DPeiTView.Nodes.Add("" + ds.Tables["OneTree"].Rows[i][0].ToString() + "");及
    if (ds.Tables["TwoTree"].Rows[j][0].ToString() == ds.Tables["OneTree"].Rows[i][0].ToString())
      {
      this.DPeiTView.Nodes[i].Nodes.Add("" + ds.Tables["TwoTree"].Rows[j][1].ToString() + "");部分为:
    iNode.Nodes.Add("" + ds.Tables["TwoTree"].Rows[j][1].ToString() + "");试试。
      

  2.   

    showjancn:
    按照你说的,还是一样的错误提示。
      

  3.   

    sql 形成树结构在绑定
    或F11单步看看值
    public class Department
    {
      public string name { get; set; }
      public string code {get;set;}
      private List<Department> _childdepartment = new List<Department>();
      public List<Department> childDepartment
      {
      get
      {
      return _childdepartment ;
      }
      }
    }
    public class User
    {
      public string usrname { get; set; }
    }
    public static Department GetList()
      {
      var a = new Department { name = "a", code = "0" };
      var b = new Department { name = "b", code = "001" };
      var c = new Department { name = "c", code = "002" };
      a.ChildDepartment.Add(b);
      a.ChildDepartment.Add(c);
      return a;
      }
    treeview
    private void BindData(TreeNodeCollection treeNodeCollection, Department dept)
      {
      var node = new TreeNode { Text =dept.name, Value = dept.code };
      treeNodeCollection.Add(node);
      if (dept.ChildDepartment.Count > 0)
      dept.ChildDepartment.ForEach(p => { BindData(node.ChildNodes, p); });
      }
      

  4.   

    知道问题了。三成for循环,造成不同父节点下的子节点的索引值错误,而引起的问题。不同父节点是同级别的
    子节点也是同级别的