2016-10-05 31 views
1

このコードは、リスト内のチェックされた項目だけが表示されるように、dataGridViewを事前フィルタします。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です。これはItemCheckEventArgsでなければなりません。

+0

ItemCheckイベントが発生するまで、チェック状態は更新されません。[CheckedListBox ItemCheckイベントは、以前にチェックされた項目の後で実行するように管理します。/a/32291665/3110834) –

関連する問題