0

我已经为这个问题苦苦挣扎了几天,但我还没有找到任何答案;我创建了一个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)
    //{
    //}
}

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

4

1 回答 1

0
bind.Filter = "Departamento NOT IN (" + string.Join(",", deptoList.ToArray()) + ")";
于 2017-04-07T07:05:05.460 回答