如何工作asp.net中包含的treeview节点?

问题描述

| 这些代码不起作用。如何只添加一个值。我不能使用.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,因为它正在检查集合的对象刚刚创建。 如果要避免添加等效节点,则需要更改检查集合的方式。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...