SqlDataReader dr = xfz_sqlhelper.SqlHelper.Execute_datareader("tree_kc1", param);           TreeNode tn1 = TV_pj.Nodes[0];           while (dr.Read())
           {
               TreeNode childnode = new TreeNode();
               childnode.Text = dr["course_name"].ToString();
               childnode.NavigateUrl = dr["pk_id"].ToString();
               childnode.Target = "right";
               tn1.ChildNodes.Add(childnode);               //Response.Write( dr["course_name"].ToString()+ dr["pk_id"].ToString());
           }           dr.Close();///上面是没问题的,下面就提示我索引越界了,           SqlDataReader dr = xfz_sqlhelper.SqlHelper.Execute_datareader("tree_kc1", param);           TreeNode tn1 = TV_pj.Nodes[0];
           TreeNode childnode = new TreeNode();
           while (dr.Read())
           {
               
               childnode.Text = dr["course_name"].ToString();
               childnode.NavigateUrl = dr["pk_id"].ToString();
               childnode.Target = "right";
               tn1.ChildNodes.Add(childnode);               //Response.Write( dr["course_name"].ToString()+ dr["pk_id"].ToString());
           }           dr.Close();注意比较不同之处在于,声明被加入的那个子节点的时间 ,,
一个是在read之前,一个是在read时,,

解决方案 »

  1.   

    asp.net控件会检查以保证控件不能被加入两个容器。当控件被重复加入同一容器的时候,也是自动删除前一个成员(引用)的。例如:
      tn1.ChildNodes.Add(childnode);
      tn1.ChildNodes.Add(childnode);
    此时tn1中只有一个childnode而不会是两个。
      

  2.   

    你的后一个程序可以被改为:SqlDataReader dr = xfz_sqlhelper.SqlHelper.Execute_datareader("tree_kc1", param);           TreeNode tn1 = TV_pj.Nodes[0];
               TreeNode childnode = new TreeNode();
               while (dr.Read())
               {
                   
                   childnode.Text = dr["course_name"].ToString();
                   childnode.NavigateUrl = dr["pk_id"].ToString();
                   childnode.Target = "right";
                   tn1.ChildNodes.Add(childnode);
                   childnode = new TreeNode();  //加了这一行,以保证childnode指向新实例               //Response.Write( dr["course_name"].ToString()+ dr["pk_id"].ToString());
               }           dr.Close();