2017-12-27 32 views
-1

트리 뷰를 필터링 한 후 선택된 트리 노트 유지 트리 뷰를 필터링합니다. 체크 노드가있을 때 필터링 된 트리 뷰에 체크 된 노드를 유지하고 싶습니다. 그리고 필터를 제거 할 때 노드를 검사해야합니다. 뭔가 잘못하고 있는데, 필터가 작동하지만 수표가 느슨합니다.필터링 후 선택된 트리 노트 유지

List<string> ListCheckboxItems = new List<string>(); //create a list from the checkedlistbox itmes 
List<string> KeepSelectedItems = new List<string>(); //Create a list with the selected items 


     private void textBox1_TextChanged(object sender, EventArgs e) //new 24-12-2017 
     { 
      var filteredItems = ListCheckboxItems.Where(item => item.Contains(textBox1.Text)); 

      List<string> FilterList = filteredItems.ToList(); 


      treeViewFilter.Nodes.Clear();   //remove all nodes 
      foreach (object item in FilterList)  //Fill it again with only the filtered items 
      { 
       treeViewFilter.Nodes.Add(item.ToString()); //new 24-12-2017 
      } 

      foreach (string keepitem in KeepSelectedItems) //Keep the items checked when filter starts 
      { 
       TreeNode[] arr = treeViewFilter.Nodes.Find(keepitem, true); 

       foreach (TreeNode s in arr) 
       { 
        treeViewFilter.SelectedNode = s; 
        s.Checked = true; 
       } 
      } 

      //check if empty the put the original list back 
      if (textBox1.Text == string.Empty) //park the checked items 
      { 
       foreach (string item in KeepSelectedItems) 
       { 
        TreeNode[] arr = treeViewFilter.Nodes.Find(item, true); 
        foreach (TreeNode s in arr) 
        { 
         treeViewFilter.SelectedNode = s; 
         s.Checked = true; 
        } 
       } 
      } 
     } 

답변

0

찾았습니다. :

private void textBox1_TextChanged(object sender, EventArgs e) //new 24-12-2017 
     { 
      var filteredItems = ListTreeViewItems.Where(item => item.Contains(textBox1.Text)); 

      List<string> FilterList = filteredItems.ToList(); 


      treeViewFilter.Nodes.Clear();   //remove all nodes 
      foreach (object item in FilterList)  //Fill it again with only the filtered items 
      { 
       TreeNode aNode = new TreeNode(item.ToString()) { Name = item.ToString() }; //THIS LINE IS THE SOLUTION 
       treeViewFilter.Nodes.Add(aNode); 
      } 

      //zet de vinkjes weer terug 
      foreach (string keepitem in KeepSelectedItems) //Keep the items checked when filter starts 
      { 


       TreeNode[] arr = treeViewFilter.Nodes.Find(keepitem, true); 

       Logging.WriteToLog("", "treeViewFilter.Nodes.Find(keepitem, true); " + treeViewFilter.Nodes.Find(keepitem, true)); 
       // Logging.WriteToLog("", "test " + test); 

       foreach (TreeNode s in arr) 
       { 
        treeViewFilter.SelectedNode = s; 
        s.Checked = true; 
       } 
      } 

      //check if empty the put the original list back 
      if (textBox1.Text == string.Empty) //park the checked items 
      { 
       foreach (string item in KeepSelectedItems) 
       { 
        TreeNode[] arr = treeViewFilter.Nodes.Find(item, true); 
        foreach (TreeNode s in arr) 
        { 
         treeViewFilter.SelectedNode = s; 
         s.Checked = true; 
        } 
       } 
      } 
     }