предотвращение дублирования при вставке узлов в элемент управления TreeView - PullRequest
0 голосов
/ 10 июня 2011

Я хочу создать иерархическое представление строк на основе первых двух символов.

Если строки: AAAA, AAAA, BBDD, AABB, AACC, BBDD, BBEE

Я хочу создать древовидную структуру, которая выглядит следующим образом:

AA  
  AAAA  
  AABB
  AACC 
BB
  BBDD
  BBEE

В настоящее время у меня есть некоторый код, который выглядит следующим образом (внутри цикла над строками):

    TreeNode pfxNode;

    if (treeView1.Nodes[pfx]!=null) {
        pfxNode = treeView1.Nodes[pfx];
    }
    else {
        pfxNode = treeView1.Nodes.Add(pfx);
    }

    if (!pfxNode.Nodes.ContainsKey(string)) {
        pfxNode.Nodes.Add(string, string + " some info");
    }

По некоторым причинам это заканчивается множеством узлов "AA" на верхнем уровне.
Чего мне не хватает?

пожалуйста, не выполняйте предварительную фильтрацию строк. Я хочу иметь возможность проверить, существует ли определенный триод на основе его ключа.

спасибо

Ответы [ 2 ]

2 голосов
/ 10 июня 2011
else {
    pfxNode = treeView1.Nodes.Add(pfx);
}

Это ваша ошибка, вы забыли установить ключ узла дерева.Так что следующий ContainsKey () не найдет его.Исправить:

    pfxNode = treeView1.Nodes.Add(pfx, pfx);
0 голосов
/ 10 июня 2011

Используйте это:

var q = from s in arr
        group s by s.Substring(0, 2) into g
        select new
        {
            Parent = g.Key,
            Children = g.Select (x => x).Distinct()
        };

foreach (var item in q)
{
    var p = new TreeNode(item.Parent);
    TreeView1.Nodes.Add(p);
    foreach (var item2 in item.Children)
        p.Nodes.Add(new TreeNode(item2));
}
...