2011-04-13 3 views
0

이 코드는 작동하지 않습니다. 하나의 값을 추가하는 방법. .Nodes.Contains 메서드를 사용할 수 없습니다. 예 : 내 고객 : yusuf1, yusuf2, yusuf1, yusuf4; 나는 treeview yusuf1, yusuf2, yusuf1, yusuf4;를 참조하십시오. 하지만 난 yusuf4 어떻게 treeview 노드를 작동 asp.net에 포함되어 있습니까?

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

의이 두 쉽게 구분할 수 있지만, 비슷한 유형이 코드는 불완전 및/또는 오류가 있음을 기억하십시오. quotationList는 어디에서 왔습니까? –

+0

귀하의 treeView 고객에게 노드 컬렉션이 있습니까? –

답변

2

treeViewCustomer.Nodes.Contains(newnode)의 문제점은이 메소드가 참조 평등 만 검사하는지의 여부입니다. 동일한 노드이지만 다른 노드가 컬렉션에 있는지 여부를 확인하는 데 사용할 수 없습니다.

같은 일치하는 노드를 찾을 수있는 foreach 루프를하고 그러나 사용 가능한 몇 가지 옵션이, 또는 당신이 그것을 추가 할 때의 TreeNode에 고유 한 키를 할당하고, .ContainsKey 방법을 사용하여이있다. 나는 TreeNodeCollection이 Name을 키로 사용한다고 생각한다.

따라서, 귀하의 예제에서 -이 같은 개체가 그냥 만들어진에 대한 컬렉션을 확인 있다고 있기 때문에

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

이 코드의 사본 또는 프리 핸드 식입니다, yusuf1, yusuf2을보고 싶어?

예에서 "mytestList"라는 항목 모음을 만들고 있지만 foreach 루프에서 "quotationList"를 사용합니다.

또한, 코드가 없습니다 :

treeViewCustomer.DataBind(); 

는 다른 곳에서이 일을하고 있는가?

+0

DataBind()는 DataSource가 사용될 때만 유용합니다. – Magnus

0

라인 if (!treeViewCustomer.Nodes.Contains(newnode))은 항상 true가됩니다해야한다.

동일한 노드를 추가하지 않으려면 컬렉션을 확인하는 방식을 변경해야합니다.

1

@Programmerist : 문제는 TreeNode.Contains가 TreeNodeCollection을 검색하는 동안 노드를 비교하는 방법입니다. 나는이 문제도 가지고 있었고 필드를 수동으로 비교하기 위해 콜렉션에서 foreach를하기로 결정했다.

것을 제외 : 트리 노드

System.Windows.Forms.TreeNode 
    System.Web.UI.WebControls.TreeNode 
관련 문제