【发布时间】:2017-05-27 13:19:17
【问题描述】:
我有一个绑定到数据表的 Datagridview。我想根据单元格的值隐藏或显示一行,例如,如果单元格值为“N”,则使该行可见,否则如果为“Y”,则隐藏该行。
数据列设置为:
New DataColumn With {.ColumnName = "Rec", .AllowDBNull = False, .DefaultValue = "N", .DataType = GetType(String)}
我还处理了 Datagridview 的 CellValueChanged 事件,如下所示:
Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
If CType(sender, DataGridView).Columns(e.ColumnIndex).HeaderText.Equals("Rec") Then
CType(sender, DataGridView).Rows(e.RowIndex).Visible = CType(sender, DataGridView).Item(e.ColumnIndex, e.RowIndex).Value.Equals("N")
End If
End Sub
但是当我以编程方式将值更改为“Y”时(我可以看到网格中的值已更改),该行仍然可见。我还在事件处理程序中设置了一个中断,它没有被触发!那么问题来了,当我将单元格值更改为“Y”时,如何隐藏 datagridviewrow?
编辑
为了让手头的问题更加清晰,这就是我以编程方式更新网格数据源的方式:
CType(DataGridView1.DataSource, DataTable).Item("Rec") = "Y"
我可以直接更新网格并因此触发 cellvaluechanged 事件,但是这会引发 CurrencyManager 错误,因此每次单元格值更新时都必须暂停绑定然后恢复绑定到网格。这很有效,但即使是对于一个小数据集(即使通过反射实现双缓冲)也是如此。
【问题讨论】:
-
从
DataTable删除行。 -
如果我从数据表中删除该行,将无法再更新该行以使其在 datagridview 中再次可见。
-
如果您在 datagridview 中隐藏行 - 那么如何将单元格值更改回
N? -
就像我在问题中明确指出的那样,我以编程方式更改了值(阅读最后一段)。
-
用户如何将任何内容设置为不可见的行上的任何内容?
标签: vb.net datagridview datagridviewrow