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

本文关键字:控件 视图 节点 插入 | 更新日期: 2023-09-27 17:58:52

我想创建一个基于前两个字符的字符串层次视图。

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

请不要预过滤字符串我希望能够根据其键检查是否存在特定的树节点。

感谢

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

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

这是你的错误,你忘记设置树节点的键了。所以下一个ContainsKey()找不到它。修复:

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

使用此:

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