已经有一些代码几乎存在,并且需要进行一些最终的调整。
这是我的预期输出:
ParentNode1
|----ChildNode1 (3)
|----ChildNode2 (2)
|----ChildNode3
ParentNode2
|----ChildNode4 (2)
|----ChildNode5
节点,ChildNodes 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中)并将temp节点与列表中的每个节点进行比较,如果找到重复的节点,它会将名称从“ChildNode4”修改为“ChildNode4(2)”,每个节点添加1发现重复(例如,从“ChildNode4(2)”到“ChildNode4(3)”等)。
如果在For循环中找不到副本,则索引不会更改,从而进入最终if并将其添加到父节点。
有人能指出我正确的方向吗?也许我需要修复我的Foreach或者我正在使用我的GetNodeCount错误(到目前为止它总是返回0)。
编辑:截至我发布的代码,我总是得到:ChildNode3(0)而不是实际的数字。不知怎的,我需要GetNodeCount来实际反映ChildNode3s的数量,而不实际显示所有的ChildNode3s
谢谢!
答案 0 :(得分:0)
我建议您替换以下代码:
index = contactNode1.GetNodeCount(false);
与
index = contactNode1.Nodes.Count(); //start from 0
或
index = contactNode1.Nodes.Count() + 1; // start from 1
如果这不能解答您的问题,请您发布实际结果,以便我们了解问题所在
答案 1 :(得分:0)
//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);
}
根据需要进行修改。您可以将此方法作为参数传递给父节点。