2011-04-13 88 views
0

這些代碼不起作用。如何只添加一個值。我不能使用.Nodes.Contains方法。例如:我的客戶: yusuf1,yusuf2,yusuf1,yusuf4;我看到treeview yusuf1,yusuf2,yusuf1,yusuf4 ;.但我想看到yusuf1,yusuf2,yusuf4 如何在asp.net中工作treeview節點?

protected void FillTreeViewCustomers() 
     { 
      MyClass mytest = new MyClass(); 
      IEnumerable<Quotation> mytestList = mytest .GetAll(); 
      foreach MyClass item in mytestList) 
      { 

       TreeNode newnode = new TreeNode() { Text = item.Customer, Value = item.Customer }; 
       if (!treeViewCustomer.Nodes.Contains(newnode)) 
       { 
        treeViewCustomer.Nodes.Add(newnode); 
       } 


      } 
     }
+0

的有兩種differente但類似這種類型的代碼是不完整的和/或包含錯誤。 quotationList從哪裏來? – 2011-04-13 08:36:12

+0

你的treeViewCustomer有節點集合嗎? – 2011-04-13 08:46:57

回答

2

treeViewCustomer.Nodes.Contains(newnode)的問題在於此方法僅檢查參考平等。您不能使用它來確定集合中是否有等效但不同的節點。

然而,您可以使用幾個選項,例如通過foreach循環查找匹配的節點,或者在添加treenode時指定唯一的密鑰並使用.ContainsKey方法。我認爲TreeNodeCollection使用Name作爲Key。

所以,在你的榜樣 - 這樣的事情應該去做

if (!treeViewCustomer.Nodes.ContainsKey(item.Customer) 
{ 
    treeViewCustomer.Nodes.Add(new TreeNode { 
    Name=item.Customer, 
    Text=item.Customer, 
    Value=item.Customer 
    }); 
} 
0

這是您的代碼的副本或寫意的表達?

在您的示例中,您正在創建一個名爲「mytestList」的項目集合,但隨後在您的foreach循環中使用「quotationList」。

此外,你的代碼是缺少:

treeViewCustomer.DataBind(); 

你在其他地方這樣做呢?

+0

DataBind()僅在使用數據源時有用。 – Magnus 2011-04-13 08:41:00

0

因爲物體,它的檢查剛剛創建的集線if (!treeViewCustomer.Nodes.Contains(newnode))將永遠是正確的。

如果您想避免添加等效節點,則需要更改檢查集合的方式。

1

@編程人員:問題是TreeNode.Contains如何在搜索TreeNodeCollection時比較節點。我也有這個問題,並決定做一個手動比較字段集合的foreach。

觀測數據:請記住,樹節點

System.Windows.Forms.TreeNode 
    System.Web.UI.WebControls.TreeNode 
相關問題