древовидный бесконечный цикл - PullRequest
1 голос
/ 19 ноября 2011

Я пытаюсь сделать один 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 голосов
/ 23 ноября 2011
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"]));
}

ответ на мой вопрос

0 голосов
/ 19 ноября 2011

Если у какого-то узла есть дочерние узлы, вам следует создать рекурсию - снова вызвать метод chilnoddoldur, но важно передать соответствующие аргументы: в datatable должны быть только строки с дочерними элементами, а treeNodeCollection должна представлять childNodeCollection текущего узла. Это должно выглядеть примерно так:

if (child.ChildNodes.Count > 0)
{
    child.PopulateOnDemand = true;
    //recursion call - childDt is datatable with childnode rows
    chilnoddoldur(childDt, child.ChildNodes)
}

Если некоторые из этих дочерних узлов имеют свои собственные дочерние узлы, он выполнит еще один вызов рекурсии, если нет, когда метод завершится, он продолжит выполнение родительского метода и т. Д.

Надеюсь, я был достаточно ясен, чтобы дать вам основную идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...