使用列表内容过滤datagridview C#

Using List content for filtering 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 作为用户的过滤器控件,默认情况下是选中的,所以当用户取消选中菜单时,它应该过滤包含以下内容的行未选中。

在点击事件中,我根据菜单按钮的状态在列表中添加和删除值,如您在以下示例中所见:

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)
    //{
    //}
}

但我的大问题是,如何使用列表来过滤绑定源,正如您在代码中看到的那样,我不能只使用列表甚至尝试使用 BindingSource.Filter 在foreach中,我不知道如何解决这个问题,所以任何想法都非常感谢。

bind.Filter = "Departamento NOT IN (" + string.Join(",", deptoList.ToArray()) + ")";