2011-06-09 74 views
0

我想根據前兩個字符創建字符串的分層視圖。當向treeview控件插入節點時防止重複

如果字符串: AAAA,AAAA,BBDD,AABB,AACC,BBDD,BBEE

我想reate一個TreeView,看起來像這樣:

AA 
    AAAA 
    AABB 
    AACC 
BB 
    BBDD 
    BBEE 

目前,我有一些代碼看起來像這樣(的循環中的字符串內):

TreeNode pfxNode; 

    if (treeView1.Nodes[pfx]!=null) { 
     pfxNode = treeView1.Nodes[pfx]; 
    } 
    else { 
     pfxNode = treeView1.Nodes.Add(pfx); 
    } 

    if (!pfxNode.Nodes.ContainsKey(string)) { 
     pfxNode.Nodes.Add(string, string + " some info"); 
    } 

出於某種原因,這結束了在頂級多個「AA」的節點。
我錯過了什麼?

請不要預過濾字符串我想根據密鑰檢查特定的treenode是否存在。

感謝

回答

2
else { 
    pfxNode = treeView1.Nodes.Add(pfx); 
} 

有你的錯誤,你就忘記設置樹節點的關鍵。所以下一個ContainsKey()將不會找到它。修復:

pfxNode = treeView1.Nodes.Add(pfx, pfx); 
+0

這絕對是我錯過的。我預計pfx也將成爲提供單個字符串時的關鍵。謝謝。 – epeleg 2011-06-11 14:01:33

0

使用此:

var q = from s in arr 
     group s by s.Substring(0, 2) into g 
     select new 
     { 
      Parent = g.Key, 
      Children = g.Select (x => x).Distinct() 
     }; 

foreach (var item in q) 
{ 
    var p = new TreeNode(item.Parent); 
    TreeView1.Nodes.Add(p); 
    foreach (var item2 in item.Children) 
     p.Nodes.Add(new TreeNode(item2)); 
} 
+0

雖然@Hans Passant提供的答案解決了我的問題我仍然對你的答案感興趣。這是LINQ語法 - 對嗎?你能提供一些關於這應該如何工作的細節嗎?這個語法是否有任何性能或其他優勢? – epeleg 2011-06-11 14:05:17

+0

我也無法運行將此代碼添加到我的程序中,它似乎並不知道var是什麼,並且一直說很多;這個文本塊中沒有。我應該安裝一些東西來完成這項工作嗎? – epeleg 2011-06-11 14:08:55

+0

@epeleg您需要.NET> = 3.5才能使Linq和'var'關鍵字正常工作。至於表現linq'group by'和'distinct'的操作相當不錯。 – Magnus 2011-06-11 15:16:15