Использование списка содержимого для фильтрации datagridview C#
Я боролся с этим вопросом уже несколько дней и пока не нашел ответа; Я создал ToolStripMenu
массив, который заполняется динамически из хранимой процедуры:
ToolStripMenuItem[] itemsDepto = null;
itemsDepto = new ToolStripMenuItem[data.Tables[0].Rows.Count];
for (int i = 0; i <= data.Tables[0].Rows.Count - 1; i++)
{
itemsDepto[i] = new ToolStripMenuItem();
itemsDepto[i].Tag = data.Tables[0].Rows[i].ItemArray[0];
itemsDepto[i].Text = data.Tables[0].Rows[i].ItemArray[1].ToString();
itemsDepto[i].CheckOnClick = true;
itemsDepto[i].Checked = true;
itemsDepto[i].Click += DeptoFilter_Click;
deptoList.Add(data.Tables[0].Rows[i].ItemArray[1].ToString());
}
tsmiDepartamento.DropDownItems.AddRange(itemsDepto);
И то, что я пытаюсь достичь, это использовать это ToolStripMenu
в качестве элемента управления фильтра для пользователя по умолчанию установлен флажок, поэтому, когда пользователь снимает флажок с меню, он должен фильтровать строки с непроверенным содержимым.
В событии click я добавляю и удаляю значения из списка в зависимости от состояния кнопки меню, как вы можете видеть в следующем примере:
private void DeptoFilter_Click(object sender, EventArgs e)
{
ToolStripMenuItem temp = new ToolStripMenuItem();
temp = (ToolStripMenuItem)sender;
BindingSource bind = new BindingSource();
bind.DataSource = dgvPersonalTotal.DataSource;
if (temp.CheckState == CheckState.Checked)
{
deptoList.Add(sender.ToString());
}
else
{
deptoList.Remove(sender.ToString());
}
bind.Filter = "Departamento NOT IN (" + /*LIST*/"" + ")";
dgvPersonalTotal.DataSource = bind;
//foreach (string x in deptoList)
//{
//}
}
Но у меня есть большой вопрос: как я могу использовать список для фильтрации Binding Source, как вы можете видеть в коде, я не могу просто использовать список или даже пытаться использовать BindingSource.Filter в foreach, я не Не знаю, как решить эту проблему, поэтому любая идея будет высоко ценится.
1 ответ
bind.Filter = "Departamento NOT IN (" + string.Join(",", deptoList.ToArray()) + ")";