2016-10-05 4 views
1

Этот код предварительно фильтрует dataGridView, поэтому отображаются только отмеченные элементы в списке.C# Последний элемент checkedListBox не отображается

Проблема, с которой я столкнулся, заключается в том, что код как-то пропускает последний элемент каждый раз, если я не сниму его, еще раз проверьте и нажмите «Перейти».

Here is a pic of the issue

Это мой код:

public partial class Notifications : Form 
{ 
    string filterstring = ""; 
    int count = 0; 
    private void checkedListBox_ItemCheck(object sender, System.EventArgs e) 
    { 
     // Loop through all items in the checkedBoxes. 

     foreach (object itemChecked in checkedListBox.CheckedItems) 
     { 
      if (count != 0) 
      { 
       filterstring += "OR Responsible = '" + itemChecked.ToString() + "'"; 
      } 
      else 
       filterstring += "Responsible = '" + itemChecked.ToString() + "'"; 
      count += 1; 
     } 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
      DataTableCollection tables = myDatabaseDataSet.Tables; 
      DataView view = new DataView(tables[0]); 
      BindingSource source = new BindingSource(); 
      source.DataSource = view; 
      dataGridView1.DataSource = source; 
      source.Filter = filterstring; 
    } 

Я знаю, что решение может быть глупо, но я не могу понять это.

ответ

0
private void checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if (e.NewValue == CheckState.Checked) 
     filterstring = "Responsible = '" + checkedListBox.Items[e.Index].ToString() + "' OR"; 
    // Loop through all items in the checkedBoxes. 

    foreach (object itemChecked in checkedListBox.CheckedItems) 
    { 
     filterstring += " Responsible = '" + itemChecked.ToString() + "' OR"; 
    } 
    filterstring = filterstring.Substring(0, filterstring.LastIndexOf("OR")); 
} 

Вы должны проверить новое значение предмета. Если он установлен, вы можете включить его в свою строку фильтрации. Также удаление последнего OR намного лучше, чем в каждом итераторе. Редактировать: Ваше событие EventArgs Bu должно быть ItemCheckEventArgs

+0

Состояние проверки не обновляется до тех пор, пока не произойдет событие ItemCheck. [Управление проверкой CheckedListBox ItemCheck для запуска после того, как элемент был проверен не раньше] (http://stackoverflow.com/а/32291665/3110834) –