使用列表内容过滤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()) + ")";
几天来我一直在为这个问题苦苦挣扎,但我还没有找到任何答案;我创建了一个 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()) + ")";