每当列值等于特定值时,如何隐藏 datagridview 行

How can I hide datagridview row whenever a column value equals specific value

例如,

我有这个绑定到数据表的数据网格视图:

A B C
1 4 7
2 5 8
3 6 9

B 是我要检查其值的列,例如我保存的 int 值为 5。代码应检查 B 列中是否有值 5,如果为真则所有行值为 5 的可见性设置为 true,所有其他行的可见性设置为 false。

现在,我已经尝试了这个小代码(虽然它检查了所有单元格但不是按特定列):

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    int rowIndex = row.Index;
                    if (row.Cells[i].Value.ToString().Equals("16"))
                    {
                        CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];
                        currencyManager1.SuspendBinding();
                        dataGridView1.Rows[rowIndex].Visible = true;
                        currencyManager1.ResumeBinding();
                    }
                    else
                    {
                        CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];
                        currencyManager1.SuspendBinding();
                        dataGridView1.Rows[rowIndex].Visible = false;
                        currencyManager1.ResumeBinding();
                    }
                        
                }
            }

现在关于这个 CurrencyManager,当我试图在没有它的情况下隐藏行时,它只是让我出错,但现在所有行的可见性都设置为 false。问题是我不知道在哪里查看以及如何修复它,即使代码检查了单元格,代码中的值“16”应该在 datagridview 中显示一些行,但它没有。

简单多了。对于像这样绑定的数据网格视图:

myDgv.DataSource = dt;

我们可以像这样动态过滤dgv:

dt.DefaultView.RowFilter = "[B] = 5"; //only show rows where B is 5

当 DGV 的数据源设置为数据table 时,它会绑定到由 DefaultView 属性 导出的 DataView,这样您就可以更改视图的属性,例如筛选和排序,并且它将影响 DGV。您还可以选择基于 table 创建自己的 DataView 并将 DGV 绑定到它。有关可在 RowFilter 中使用的语法的更多信息,请查看 DataColumn.Expression

使用绑定数据时,请尝试养成通过查看容器(数据table)访问数据的习惯,而不是枚举 DGV 并从中提取值

您可能会发现将数据table 绑定到 BindingSource,然后将 BindingSource 绑定到 DGV 更有用 - 绑定源也有一个具有相同语法的过滤器 属性,但也保持当前行的概念/ 当用户更改 DGV 中的当前行时,绑定源上的 Current 属性 值发生变化,从而更容易在代码

中操作当前行

您表示这一切都是在表单设计器中设置的,这意味着您的表单上有:

  • 名为 _xDataGridView 的数据网格视图
  • 名为 _xBindingSource 的绑定源
  • 名为 _xDataSet 的数据集
  • bindingsource的DataSource设置为dataset,datamember设置为dataset中的table名称,datagridview的DataSource设置为bindingsource

(大多数时候我只是在描述设置以确保它是正确的)

您只需:

_xBindingSource.Filter = "[B] = 5";