2011-04-05 123 views
1

已經有一些代碼幾乎在那裏,需要一些最終的調整。C#TreeView - 生成沒有重複節點計數的樹

這是我期望的輸出:

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中)命中並將臨時節點與列表中的每個節點進行比較,如果找到了重複節點,它將修改名稱「ChildNode4」到「ChildNode4(2)」爲每個找到的重複添加1(例如,從「ChildNode4(2)」到「ChildNode4(3)」等)

如果在For循環索引不會改變,並因此進入最終的if並將其添加到父節點。

難道有人指着我正確的方向嗎?也許我需要修復我的Foreach或者我使用我的GetNodeCount錯誤(到目前爲止它總是返回0)。

編輯:截至我發佈的代碼,我總是會得到:ChildNode3(0)而不是實際的數字。不知何故,我需要GetNodeCount來實際反映ChildNode3的數量,而不實際顯示所有的ChildNode3。

謝謝!

+0

這並不完全清楚你遇到什麼問題。你能更具體地說明你需要回答什麼問題嗎? – 2011-04-05 15:04:30

+0

我建議說你的代碼有什麼問題? – 2011-04-05 15:06:50

+0

截至我發佈的代碼,我總是會得到:ChildNode3(0)而不是實際的數字。不知何故,我需要GetNodeCount來真實反映ChildNode3的數量',而實際上沒有顯示所有的ChildNode3 – Demasterpl 2011-04-05 15:32:10

回答

0

我建議你更換代碼:

index = contactNode1.GetNodeCount(false); 

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

index = contactNode1.Nodes.Count() + 1; // start from 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); 
} 

根據需要進行修改。您可以將此作爲一種方法,傳遞父節點作爲參數。

+0

我的回答有幫助嗎? – zberk 2011-05-09 19:42:08