C # TreeView дубликаты узлов и дочерних - PullRequest
0 голосов
/ 04 октября 2018

Я создал дерево, но у меня проблема.

В моем коде узлы были добавлены дубликаты, как это;

treeview

treeview

Как я могу решить и закодировать эту проблему?

Мои данные;

Column1     Column2
category      subcategory
category      subcategory2
category      subcategory3 
test          subtest
test          subtest2

Мой код;

SqlConnection con = new SqlConnection("Data Source=test;Initial Catalog=test;Integrated Security=True;");

DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("select * from mytable", con);
da.Fill(dt);

treeView1.Nodes.Add("Documents");

foreach (DataRow dr in dt.Rows)
{            
     TreeNode nod = new TreeNode(dr["kategori"].ToString());
     nod.Nodes.Add(dr["altkategori"].ToString());
     treeView1.Nodes.Add(nod);
}

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

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

foreach (DataRow dr in dt.Rows)
{            
    TreeNode nod = treeView1.Nodes.Find(dr["kategori"].ToString());
    if (nod == null) 
    { 
        nod = new TreeNode(dr["kategori"].ToString());
        treeView1.Nodes.Add(nod);
    }
    nod.Nodes.Add(dr["altkategori"].ToString());
}
0 голосов
/ 04 октября 2018

Дело в том, что вы создаете еще один category и test узел соответственно для каждого subcategory и subtest.

. Использование LINQ GroupBy сгруппирует ваше altkategori внутри того же kategori узла:

treeView1.Nodes.Add("Documents");

foreach (IGrouping<string, string> kategori in dt.Rows.Cast<DataRow>().GroupBy(dr => dr["kategori"].ToString(), dr => dr["altkategori"].ToString()))
{
    TreeNode nod = new TreeNode(kategori.Key); // node with kategori text

    foreach (string altkategori in kategori)   // foreach subnode in kategori
        nod.Nodes.Add(altkategori);            // add another altkategori node in

    treeView1.Nodes.Add(nod);                  // add your final kategori node
}

Скажите, если вы не уверены в LINQ, и / или если вам нужно больше объяснений.

0 голосов
/ 04 октября 2018

TreeViews не работают как словарь

Если вам нужно такое поведение, вам нужно правильно построить дерево самостоятельно.

Если оно остается на двух уровнях, все довольно просто: простоиспользуйте new Dictionary<string, List<string>>(); и добавьте свои подкатегории.

Позже вы можете перебирать элементы в словаре и создавать соответствующие подузлы.

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