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 DataViewFiltro 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 DataViewLa mesa estaba configurada de la siguiente manera. DataTable:

DataTable showing Primary Key and Boolean Value (in red)

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:

DataGridView showing the result of the bound items

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:

Improvement is checked, but remains in the Dgv

Y cuando cambio de fila, finalmente desaparece:

Improvement has been filtered out but only when I tried selecting another row

¿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
¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top