【问题标题】:C# Treeview - Generate Tree without Duplicates with Node CountC# Treeview - 使用节点数生成不重复的树
【发布时间】:2011-04-23 00:07:51
【问题描述】:

已经有一些代码快到了,需要一些最后的调整。

这是我的预期输出:

ParentNode1
|----ChildNode1 (3)
|----ChildNode2 (2)
|----ChildNode3
ParentNode2
|----ChildNode4 (2)
|----ChildNode5

子节点 3 和 5 的节点只有一个“条目”,我从中提取数据(数据行)。

 dr["Contact"] = drows_cont[0].ItemArray[2].ToString();                                        
 TreeNode temp = new TreeNode();
 temp.Text = (dr["Contact"].ToString());
 temp.Name = temp.Text;           
 if(contactNode1.Nodes.Count == 0)/*node has no children or is null*/
 {
     contactNode1.Nodes.Add(temp);
 }
 else
 {
      int index = 1;
      foreach(TreeNode loopNode in contactNode1.Nodes)
      {                                                                   
           index = 1;
               for(int i=0; i < contactNode1.Nodes.Count; i++)
               {
                   if(contactNode1.Nodes[i].Name == temp.Name) //if match found
                   {                                                                  
                        index = contactNode1.GetNodeCount(false);
                        contactNode1.Nodes[i].Text = (dr["Contact"].ToString()) + " " + index;
                   }
               }
               if (index <= 1)
               {                                                        
                   contactNode1.Nodes.Add(temp); //AddToList
                   break;
               }
        }
  }

为了详细说明我上面的逻辑,如果父节点为 Null,它将添加 1 个子节点(临时节点)。

从这里开始,它总是命中其他。我是 Foreach 的新手,因为 Loopnode 从未使用过:\

for(在 foreach 中)被命中并将临时节点与列表中的每个节点进行比较,如果发现重复节点,它将将名称从“ChildNode4”修改为“ChildNode4 (2)”,为每个节点添加 1发现重复项(例如,从“ChildNode4 (2)”到“ChildNode4 (3)”等)

如果在 For 循环中没有找到重复项,则索引不会更改,因此会进入最终的 if 并将其添加到父节点。

有人能指出我正确的方向吗?也许我需要修复我的 Foreach 或者我使用错误的 GetNodeCount(到目前为止它总是返回 0)。

编辑:从我发布的代码开始,我总是会得到:ChildNode3 (0) 而不是实际数字。不知何故,我需要 GetNodeCount 来实际反映 ChildNode3 的数量而不实际显示所有 ChildNode3

谢谢!

【问题讨论】:

  • 目前还不清楚您遇到了什么问题。您能否更具体地说明您需要回答什么问题?
  • 我建议说你的代码有什么问题?
  • 从我发布的代码开始,我总是会得到:ChildNode3 (0) 而不是实际数字。不知何故,我需要 GetNodeCount 来实际反映 ChildNode3s 的数量,而不实际显示所有 ChildNode3s

标签: c# treeview duplicates nodes


【解决方案1】:

我建议你替换以下代码:

index = contactNode1.GetNodeCount(false);

index = contactNode1.Nodes.Count(); //start from 0

index = contactNode1.Nodes.Count() + 1; // start from 1

如果这不能回答您的问题,请您发布您的实际结果,以便我们了解问题所在

【讨论】:

    【解决方案2】:
    //Add parent
    treeView.Nodes.Add(parentNode);
    //Loop through every child
    foreach(TreeNode childNode in parentNode.Nodes)
    {
        int index = 0;
        //Calculate childNode's children
        foreach (TreeNode node in loopNode.Nodes)
        {
            index++;
        }
        string node;
        //If index is 0, dont change text.
        if (index != 0) node = childNode.Text + " (" + index + ")";
        else node = childNode.Text;
        parentNode.Nodes.Add(childNode);
    }
    

    根据需要进行修改。您可以将此作为方法,将父节点作为参数传入。

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      相关资源
      最近更新 更多