treeview无限循环

时间:2011-11-18 21:57:18

标签: c# asp.net treeview

我正在尝试使用无限子组创建一个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();

2 个答案:

答案 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"]));
}

我的问题的答案