问题描述
|
这些代码不起作用。如何只添加一个值。我不能使用.Nodes.Contains方法。例如:我的客户:
yusuf1,yusuf2,yusuf1,yusuf4;我看到treeview yusuf1,yusuf2,yusuf1,yusuf4;。但是我想看yusuf1,yusuf2,yusuf4
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);
}
}
}
解决方法
treeViewCustomer.Nodes.Contains(newnode)
的问题在于此方法仅检查引用是否相等。您不能使用它来确定集合中是否有等效但不同的节点。
但是,您可以使用一些选项,例如,执行foreach
循环以查找匹配的节点,或者在添加树节点时向其分配唯一键并使用.ContainsKey
方法。我认为TreeNodeCollection使用“ 4”作为密钥。
因此,在您的示例中-这样的事情应该可以做到
if (!treeViewCustomer.Nodes.ContainsKey(item.Customer)
{
treeViewCustomer.Nodes.Add(new TreeNode {
Name=item.Customer,Text=item.Customer,Value=item.Customer
});
}
,@Programmerist:问题是TreeNode.Contains如何在搜索TreeNodeCollection时比较节点。我也遇到了这个问题,因此决定对集合进行一次foreach手动比较字段。
Obs:请记住,有两个不同但类型相似的树节点
System.Windows.Forms.TreeNode
System.Web.UI.WebControls.TreeNode
,这是您的代码副本还是手绘表达?
在您的示例中,您正在创建一个名为\“ mytestList \”的项目的集合,然后在您的foreach循环中使用\“ quotationList \”。
另外,您的代码丢失了:
treeViewCustomer.DataBind();
你在别的地方这样做吗?
,ѭ8行将始终为true,因为它正在检查集合的对象刚刚创建。
如果要避免添加等效节点,则需要更改检查集合的方式。