2011-04-13 96 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