Cómo actualizar un DataGridView vinculado al hacer clic en CheckBox
-
21-12-2019 - |
Pregunta
Meta
Necesito una manera de configurar elementos como Terminado haciendo clic en un CheckBox
en mi atado DataGridView
.Una vez hecho esto, el elemento ya no se ve desde el DataGridView
debido a un DataView
Filtro de fila.
Explicación
tengo un DataGridView
que está ligado a un DataView
.
Private Sub LoadLispImprovements()
Private ViewLispImprovements As New DataView
ViewLispImprovements.Table = Programs.Tables("dtLispImprovements")
ViewLispImprovements.RowFilter = "Completed=0"
Lisp_dgvImprovements.DataSource = ViewLispImprovements
End Sub
Este DataView
La mesa estaba configurada de la siguiente manera. DataTable
:
Este DataTable
tiene su clave principal configurada en el campo correcto.El Completed
El campo tiene un cuadrado rojo solo para mostrarles que lo configuré como un valor booleano.
Echa un vistazo a mi DataGridView
:
Aquí es donde haría clic en la casilla de verificación y el elemento debería filtrarse (porque la casilla de verificación Mostrar todo no está marcado)
Problema
Cuando hago clic en el CheckBox
, el artículo permanece en el DataGridView
.Para que se filtre, debo seleccionar otra fila.Echar un vistazo:
Y cuando cambio de fila, finalmente desaparece:
¿Cómo puedo hacer para que se elimine automáticamente después de marcar la casilla de verificación completa?
PD:Sí, tengo el controlador de eventos 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
Solución
Puede lograr esto finalizando la edición del DataRow
cuando se cambia el valor de la celda.
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