customCheckedListBox CheckedChanged

本文关键字:CheckedChanged customCheckedListBox | 更新日期: 2023-09-27 18:28:39

我制作了customCheckedListBox,我想用它来过滤带有多重选择选项的dataGridView。我希望能够捕获CheckedListBox CheckedChange状态,但CheckedListBox只支持ItemCheck事件。

这是我的代码:

private void customCheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
   FilterDataGrid();
}
private void FilterDataGrid()
{
    var list4 = customCheckedListBox1.SelectedItems.Cast<string>().ToList();
    if (customCheckedListBox1.SelectedItems.Count != 0)
    {
       var result = list3.Where(Srodek => list4.Any(x => x == Srodek.Srodek.category1));
         DataTable ListAsDataTable3 = BuildDataTable2<CalaLinijka>(result);
         DataView ListAsDataView3 = ListAsDataTable3.DefaultView;
         dataGridView4.DataSource = view = ListAsDataView3;
    }

}

问题是ItemCheck事件只能处理一个选项,所以即使用户决定选择多个选项,它也只显示第一个选择的项目。我想CheckedChanged事件在我的情况下会起作用,但当调用ItemCheck事件时,还没有CheckedItemsItemCheck事件结束后,它们变为"已选中"。所以当它进入FilterDataGrid内部时,CheckedChanged.Count等于0。

我的问题是我应该如何处理CheckedListBox中的CheckedChanged事件。我希望我没有搞砸太多。如果有任何问题,请告诉我,我会尽力解释更多。

customCheckedListBox CheckedChanged

我通过使用foreach循环(就像KingKing建议的那样)并将其放入MouseLeave事件中来解决这个问题。

private void customCheckedListBox1_MouseLeave(object sender, EventArgs e)
{
    foreach (string itemChecked in customCheckedListBox1.CheckedItems)
    {
        CheckedList.Add(itemChecked);
    }
    FilterDataGrid();
}