Использование списка содержимого для фильтрации 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()) + ")";
Другие вопросы по тегам