#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 легко допустить ошибку. 🙂