在将节点插入树视图控件时防止重复

时间:2011-06-09 20:30:00

标签: c# treeview tree-nodes

我想根据前两个字符创建字符串的分层视图。

如果字符串是: 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”节点 我错过了什么?

请不要预先过滤字符串我希望能够根据其密钥检查特定的treenode是否存在。

感谢

2 个答案:

答案 0 :(得分:2)

else {
    pfxNode = treeView1.Nodes.Add(pfx);
}

你错了,你忘了设置树节点的密钥。所以下一个ContainsKey()将找不到它。修正:

    pfxNode = treeView1.Nodes.Add(pfx, pfx);

答案 1 :(得分:0)

使用此:

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));
}