Добавление родительских и дочерних узлов в TreeView из Sql Server 2008

#asp.net #treeview #outofrangeexception

#asp.net #просмотр дерева #исключение outofrangeexception

Вопрос:

я хочу добавить родительский и дочерний узлы с sql server в 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);
        }
    }
  

кто-нибудь может помочь мне исправить проблему в этом коде .. этот код был создан мной.

Ответ №1:

Похоже, вы пытаетесь добавить дочерний узел перед добавлением родительского. Попробуйте сначала добавить родительский, а затем дочерние узлы; вот так:

 ///...

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
     }
}
  

Комментарии:

1. спасибо, чувак, это была глупая ошибка .. но спасибо за вашу помощь .. я даже не задумался на мгновение .. великий человек. большое спасибо

2. @Abbas легко допустить ошибку. 🙂