C#树视图-生成具有节点计数的无重复树

本文关键字:-生 视图 节点 | 更新日期: 2023-09-27 17:48:57

已经有了一些代码,需要进行一些最终调整。

这是我的预期输出:

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"修改为"ChildNode2",为发现的每个重复添加1(例如,从"ChildNode4(2("到"ChildNode3(3("等(

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

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

编辑:在我发布的代码中,我总是得到:ChildNode3(0(,而不是实际数字。不知怎的,我需要GetNodeCount来实际反映ChildNode3的数量,而不实际显示所有的ChildNode3

谢谢!

C#树视图-生成具有节点计数的无重复树

我建议您替换中的代码

index = contactNode1.GetNodeCount(false);

带有

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

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

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

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

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