已经有了一些代码,需要进行一些最终调整。
这是我的预期输出:
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
谢谢!
我建议您替换中的代码
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);
}
根据需要进行修改。您可以将其作为一个方法,将父节点作为参数传入。