如何在 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 看到该项目。


说明

我有一个绑定到DataViewDataGridView

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 操作后无法正常显示,需要刷新才可以正常显示的坑

jquery 动态添加的元素 绑定事件click失效

关于JS 事件冒泡和onclick,click,on()事件触发顺序

vue iview checkbox点击事件

给按钮绑定的click事件无效