2012-06-18 4 views
0

XML 파일에서로드 된 treeview 데이터가 있습니다. 사용자가 텍스트 상자에 내용을 입력하면 검색을 수행하려고합니다. 그게 올바른 방법인가요 ?? 데이터를 필터링하고 싶습니다. 몇 가지 예를 보여주십시오.C# : treeview에서 검색

아래 코드는 작동하지 않습니다. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged.aspx

및 특정 노드 사용을 찾는 : 여기

treeView1.Nodes.Find() 

모드 세부 정보 : http://msdn.microsoft.com/en-us/library/system.windows.forms.treenodecollection.find

+1

작동하지 않는 코드의 일부? 몇 가지 중단 점을 넣고 다른 입력으로 어떻게 작동하는지 확인하십시오. –

+0

@Ozgur Dogus : 텍스트 상자에 무언가를 입력하면 트 리뷰에서 아무런 검색도 일어나지 않습니다. – linguini

+0

그래서 textchanged 이벤트가 실행되지 않습니까? –

답변

1

당신은 텍스트 변경된 이벤트에 등록해야 당신이 제공 한 코드가 노드의 최상위 레벨만을 보았을 수도 있습니다. 일치 항목을 찾을 때까지 노드의 자식 노드를 반복적으로 통과하는 메소드를 만들어야합니다. 이런 식으로 뭔가 :

private TreeNode FindNode(TreeNode node, string searchText) 
{ 
    TreeNode result = null; 

    if (node.Text == searchText) 
    { 
    result = node; 
    } 
    else 
    { 
    foreach(TreeNode child in node.Nodes) 
    { 
     result = FindNode(child, searchText); 
     if (result != null) 
     { 
     break; 
     } 
    } 
    } 
    return result; 
} 
2

내가 또 다른 문제는 생각을

textBox1.Enter += new EventHandler(txtSearch_TextChanged); 

private void txtSearch_TextChanged(object sender, EventArgs e) 
     { 

      foreach (TreeNode node in this.treeView1.Nodes) 
      { 

       if (node.Text.ToUpper().Contains(this.textBox1.Text.ToUpper())) 
       { 

        treeView1.SelectedNode = node; 

        break; 

       } 
    } 
2
textBox1.Enter += new EventHandler(txtSearch_TextChanged); 

private void txtSearch_TextChanged(object sender, EventArgs e) 
     { 

      foreach (TreeNode node in this.treeView1.Nodes) 
      { 

       if (node.Text.ToUpper().Contains(this.textBox1.Text.ToUpper())) 
       { 
        treeView1.Select(); // First give the focus to the treeview control, 
        //doing this, the control is able to show the selectednode. 
        treeView1.SelectedNode = node; 

        break; 

       } 
    } 
관련 문제