c# - 根据另一个 DataGridView 的行过滤 BindingSource

标签 c# winforms datagridview filter bindingsource

我在 Winforms 中有两个 DataGridViews。 DataGrid1 连接到一个表,该表包含需要完成的作业列表。一旦有人完成了一项工作,它就会作为完成输入到一个单独的表中,该表连接到 DataGrid2。

我需要过滤 DataGrid1 的绑定(bind)源,以便当作业在 DataGrid2 中显示为已完成时,它会从 DataGrid1 中过滤掉。我使用的当前代码仅按 DataGrid2 中的最后一个条目过滤绑定(bind)源,我需要它按所有条目过滤。

如何根据 DataGrid2 的 a 列的所有值过滤 DataGrid1 的 BindingSource?

foreach (DataGridViewRow row in dataGrid2.Rows)
{
    DataGrid1BindingSource.Filter = 
        string.Format("ColumnName <> '{0}'", row.Cells[1].Value);
}

这是数据表中所有作业的示例,然后是包含未完成作业的第一个网格和包含已完成作业的第二个网格。应显示在未完成网格中的作业是那些不在已完成作业网格中的作业:

 __________        ____________        ___________
| All Jobs |      | Incomplete |      | Completed |  
|――――――――――|      |――――――――――――|      |―――――――――――|  
| JobTitle |      | JobTitle   |      | JobTitle  |  
|――――――――――|      |――――――――――――|      |―――――――――――|  
| Job 1    |      | Job 1      |      | Job 3     |  
| Job 2    |      | Job 2      |      | Job 4     |  
| Job 3    |      |            |      |           |
| Job 4    |      |            |      |           |
 ‾‾‾‾‾‾‾‾‾‾        ‾‾‾‾‾‾‾‾‾‾‾‾        ‾‾‾‾‾‾‾‾‾‾‾

最佳答案

在阅读答案之前,您应该知道,如果您没有 bool 字段或其他东西来检测哪项工作已完成,那么这不是一个好的设计。您应该有一份工作 list 。然后基于 bool 字段,您应该在第一个网格中显示未完成的作业,在第二个网格中显示已完成的作业。那么过滤器将只是 Completed = trueCompleted = false

无论如何,您可以在过滤器表达式中使用IN。创建要在过滤器中使用的值列表就足够了,然后以这种方式创建过滤器:

var ids = this.dataGridView2.Rows.Cast<DataGridViewRow>()
                .Where(r => !r.IsNewRow)
                .Select(r => r.Cells[0].Value.ToString());
bs1.Filter = string.Format("Column1 NOT IN ({0})", string.Join(",", ids));

在上面的例子中我假设 ids 是 int 所以例如 "Column1 NOT IN (1,2,3)" 将是过滤器。对于字符串 ID,过滤器将是 "Column1 NOT IN ('a','b','c')"。所以你可以像下面这样更改 select 语句:

.Select(r => string.Format("'{0}'",r.Cells[0].Value.ToString()));

关于c# - 根据另一个 DataGridView 的行过滤 BindingSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38456756/

相关文章:

c# - 如何在 Azure 广告 B2C 上使用自定义角色?

c# - 从 c# 到 Access DB 的 INSERT STATEMENT 中的语法错误

c# - 如何卸载 dll 以便在 MEF 重组后将其删除?

c# - 从另一个线程附加到文本框

c# - 使用空格键更改 CheckBox 时,AcceptChanges() 在 DataGridView 中抛出 System.NullReferenceException

.net - 为 DataGridView 着色以直观地查看单元格值的整个分布的算法

c# - 使用 Entity Framework 从 Excel 工作表中读取数据

c# - 如何限制在文本框中粘贴的字符数?

vb.net - 如何获取所选 ListView 项的索引号

c# 如果有新数据插入mysql则自动添加一个新按钮