Я новичок в этом, так что это может быть просто, но я застрял на этом через пару дней.Я пытаюсь реализовать Select All
функциональность и фильтрую CheckedListBox, используя TextBox в моей форме.
Что-то вроде фильтра Excel.Аналогично изображению ниже:
![excel filter](https://i.stack.imgur.com/blTGE.png)
Я заполняю CheckedListBox массивом.Емкость массива постоянно меняется в зависимости от количества элементов.Это может быть 10 или 20 или выше 50.
То, что я пробовал:
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (checkedListBox1.GetItemChecked(0) == true)
SelectDeselectAll(true);
else if (checkedListBox1.GetItemChecked(0) == false)
SelectDeselectAll(false);
//when select all is checked, and I uncheck a item in the list, uncheck select all and the item
else //if (checkedListBox1.GetItemChecked(0) == true && checkedListBox1.GetItemChecked(0) )
SelectDeselectAll(null);
}
private void SearchBox_TextChanged(object sender, EventArgs e)
{
string filter_param = SearchBox.Text.ToUpper();
var item = checkedListBox1.Items.Cast<string>().ToList();
List<string> filteredItems = item.FindAll(x => x.StartsWith(filter_param));
checkedListBox1.DataSource = filteredItems;
// if all values removed, bind the original full list again
if (String.IsNullOrWhiteSpace(SearchBox.Text))
{
checkedListBox1.DataSource = cboxAr;
}
}
private void SelectDeselectAll(bool? v)
{
if (v == true)
{
for (int i = 1; i < checkedListBox1.Items.Count; i++)
checkedListBox1.SetItemChecked(i, true);
}
else if (v == false)
checkedListBox1.ClearSelected();
else if (v == null)
{
IEnumerable<int> notChecked = (from int item in checkedListBox1.Items
where !checkedListBox1.CheckedIndices.Contains(item)
select item);
if (checkedListBox1.GetItemChecked(0) == true)
{
SelectDeselectAll(false);
foreach (int j in notChecked)
checkedListBox1.SetItemChecked(j, true);
}
}
}
После отладки : выбор всех функций работает хорошо.Но когда я фильтрую и пытаюсь выбрать отфильтрованные элементы, реализуется часть if
, и управление переходит к SelectDeselectAll(true)
.
Кроме того, не работает следующее: когда я выбираю все, а затем снимаю галочку с одного изэлементы в списке, это не сработает.
Я не знаю, где я иду не так.Кто-нибудь может указать мне правильное направление?