我正在尝试使用无限子组创建一个treeView
。
我可以添加我的群组,但我无法添加我的子群组。对于子组,输出显示我的组值。我的子组代码如下:我认为我的SQL字符串有问题,但我不知道是什么。
private void chilnoddoldur(DataTable dt, TreeNodeCollection treeNodeCollection)
//fill childnodes
{
foreach (DataRow dr in dt.Rows)
{
TreeNode child = new TreeNode();
child.Text = dr["kgr_ad"].ToString();
child.Value = dr["kgr_bsno"].ToString();
if (child.ChildNodes.Count > 0)
{
child.PopulateOnDemand = true;
}
child.SelectAction = TreeNodeSelectAction.SelectExpand;
child.Expand();
child.Selected = true;
treeNodeCollection.Add(child);
}
}
这是SQL代码:
SqlConnection conn = b.baglan();
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Open();
SqlCommand cmd = new SqlCommand("select kgr_sno,kgr_ad,kgr_bsno from kulgrp where kgr_bsno=@id", conn);
cmd.Parameters.AddWithValue("@id", kgrSno);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
kgrBsno.ChildNodes.Clear();
chilnoddoldur(dt, kgrBsno.ChildNodes);
conn.Close();
答案 0 :(得分:0)
如果某个节点有子节点,你应该创建递归 - 再次调用chilnoddoldur方法,但是传递适当的arigments很重要:datatable应该只包含带有子元素的行,而treeNodeCollection应该表示当前节点的childNodeCollection。看起来应该是这样的:
if (child.ChildNodes.Count > 0)
{
child.PopulateOnDemand = true;
//recursion call - childDt is datatable with childnode rows
chilnoddoldur(childDt, child.ChildNodes)
}
如果某个子节点有自己的子节点,它会进行另一次递归调用,否则,当方法用完时,它会继续运行其父方法等。
我希望我足够明确地给你一个基本的想法。
答案 1 :(得分:0)
foreach (DataRow dr in dt.Rows)
{
TreeNode child = new TreeNode();
child.Text = dr["kgr_ad"].ToString();
child.Value = dr["kgr_sno"].ToString();
child.CollapseAll();
kgrBsno.ChildNodes.Add(child);
AltGruplariYaz(child, Convert.ToInt32(dr["kgr_sno"]));
}
我的问题的答案