2017-12-27 10 views
-1

Ausgewählte Treenodes nach dem Filtern der Treeview beibehalten Ich filtere eine Baumansicht. Wenn es überprüfte Knoten gibt, möchte ich die überprüften Knoten in der gefilterten Baumansicht behalten. Und wenn ich den Filter entferne, müssen die Knoten noch überprüft werden. Ich mache etwas falsch, der Filter funktioniert, aber ich verliere die Checkes.Ausgewählte Treenodes nach Filterung beibehalten

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; 
        } 
       } 
      } 
     } 

Antwort

0

Ich habe es gefunden. :

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; 
        } 
       } 
      } 
     }