如何在 CheckBox Click 上刷新绑定的 DataGridView
Posted
技术标签:
【中文标题】如何在 CheckBox Click 上刷新绑定的 DataGridView【英文标题】:How To Refresh a Bound DataGridView On CheckBox Click 【发布时间】:2014-03-29 14:34:04 【问题描述】:目标
我需要一种方法将项目设置为已完成,方法是单击绑定的DataGridView
中的CheckBox
。完成后,由于DataView
的行过滤器,不再从DataGridView
看到该项目。
说明
我有一个绑定到DataView
的DataGridView
。
Private Sub LoadLispImprovements()
Private ViewLispImprovements As New DataView
ViewLispImprovements.Table = Programs.Tables("dtLispImprovements")
ViewLispImprovements.RowFilter = "Completed=0"
Lisp_dgvImprovements.DataSource = ViewLispImprovements
End Sub
此DataView
的表设置为以下DataTable
:
此DataTable
将其主键设置为正确的字段。 Completed
字段有一个红色方块,只是为了向大家展示我将其设置为布尔值。
看看我的DataGridView
:
这里是我点击复选框的地方,项目应该被过滤掉(因为复选框 ShowAll 未选中)
问题
当我点击 CheckBox
时,该项目停留在 DataGridView
中。为了过滤掉它,我必须选择另一行。看看:
当我更改行时,它终于消失了:
如何在我选中完成的复选框后立即将其删除?
P.S:是的,我有 CurrentCellDirtyStateChanged 事件处理程序。
Private Sub Lisp_dgvImprovements_CurrentCellDirtyStateChanged(sender As Object, e As System.EventArgs) Handles Lisp_dgvImprovements.CurrentCellDirtyStateChanged
If Lisp_dgvImprovements.IsCurrentCellDirty Then
Lisp_dgvImprovements.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
【问题讨论】:
你在Lisp_dgvImprovements.CommitEdit(DataGridViewDataErrorContexts.Commit)
之后尝试过Lisp_dgvImprovements.Refresh()
吗?
@equisde 是的。也没有用。保存到数据库后我也试过了。
【参考方案1】:
您可以通过在单元格的值发生更改时结束DataRow
的编辑来实现此目的。
Private Sub Lisp_dgvImprovements_CurrentCellDirtyStateChanged(sender As Object, e As System.EventArgs) Handles Lisp_dgvImprovements.CurrentCellDirtyStateChanged
If (Me.Lisp_dgvImprovements.IsCurrentCellDirty) Then
Me.Lisp_dgvImprovements.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
Private Sub Lisp_dgvImprovements_CellValueChanged(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Lisp_dgvImprovements.CellValueChanged
' |-- The index of boolean DataGridViewColumn
If ((e.ColumnIndex = 0) AndAlso (e.RowIndex > -1)) Then
With Me.Lisp_dgvImprovements.Rows(e.RowIndex)
If (Not .IsNewRow) Then
With DirectCast(.DataBoundItem, DataRowView).Row
' |-- The index of boolean DataColumn
.Item(0) = True
.EndEdit()
End With
End If
End With
End If
End Sub
【讨论】:
以上是关于如何在 CheckBox Click 上刷新绑定的 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章
input type为checkbox或radio时的click默认事件
el-checkbox-group 操作后无法正常显示,需要刷新才可以正常显示的坑