【发布时间】: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