2011-10-03 107 views
2

我想从sql服务器添加父节点和子节点到treeview。我实现了一些代码。但我得到错误“索引超出范围”从Sql Server 2008在TreeView中添加父节点和子节点

下面是我用来填充父节点和子节点的代码。

protected void GetParentNodes() 
    { 
     SqlDataAdapter adap = new SqlDataAdapter("select id, name from crossarticle_category where parentid=-1", con); 
     DataTable dt = new DataTable(); 
     adap.Fill(dt); 
     int index = -1; 
     foreach (DataRow d in dt.Rows) 
     { 
      SqlDataAdapter adapInner = new SqlDataAdapter("select id, name from crossarticle_category where parentid=" + Convert.ToInt32(d["id"].ToString()) + "", con); 
      DataTable dtInner = new DataTable(); 
      adapInner.Fill(dtInner); 
      index++; 
      TreeNode n = new TreeNode(); 
      n.Value = d["id"].ToString(); 
      n.Text = d["name"].ToString(); 
      foreach (DataRow r in dtInner.Rows) 
      { 
       if (dtInner.Rows.Count > 0) 
       { 
        TreeNode inner = new TreeNode(); 
        inner.Value = r["id"].ToString(); 
        inner.Text = r["name"].ToString(); 
        tree1.Nodes[index].ChildNodes.Add(inner); 
       } 
      } 
      tree1.Nodes.Add(n); 
     } 
    } 

任何人都可以帮助我纠正这个代码中的问题..这个代码是由我自己创建的。

回答

4

看起来您正在尝试在添加父级之前添加子节点。尝试先添加父项,然后添加子节点;像这样:

///... 

n.Value = d["id"].ToString(); 
n.Text = d["name"].ToString(); 

tree1.Nodes.Add(n); 

然后

foreach (DataRow r in dtInner.Rows) 
{ 
    if (dtInner.Rows.Count > 0) 
    { 
     TreeNode inner = new TreeNode(); 
     inner.Value = r["id"].ToString(); 
     inner.Text = r["name"].ToString(); 
     tree1.Nodes[index].ChildNodes.Add(inner); //node at pos index should exist now 
    } 
} 
+0

谢谢老兄,这是一个愚蠢的错误..但感谢您的帮助..我没有,甚至想了一会儿也..伟大的人。非常感谢 – Abbas

+0

@Abbas容易犯的错误。 :) – Icarus