Pergunta

Meta

Eu preciso de uma maneira de definir itens como Concluído clicando em um CheckBox no meu limite DataGridView.Feito isso, o item não será mais visto do DataGridView devido a um DataViewfiltro de linha.


Explicação

eu tenho um DataGridView que está vinculado a um DataView.

Private Sub LoadLispImprovements()
    Private ViewLispImprovements As New DataView
    ViewLispImprovements.Table = Programs.Tables("dtLispImprovements")
    ViewLispImprovements.RowFilter = "Completed=0"
    Lisp_dgvImprovements.DataSource = ViewLispImprovements
End Sub

Esse DataViewa tabela de foi definida para o seguinte DataTable:

DataTable showing Primary Key and Boolean Value (in red)

Esse DataTable tem sua chave primária definida no campo correto.O Completed field tem um quadrado vermelho só para mostrar a vocês que eu o defini como um valor booleano.

Dê uma olhada no meu DataGridView:

DataGridView showing the result of the bound items

Aqui é onde eu clicaria na caixa de seleção e o item deveria ser filtrado (porque a caixa de seleção Mostre tudo não está verificado)


Problema

Quando clico no CheckBox , o item permanece no DataGridView.Para que seja filtrado, devo selecionar outra linha.Dê uma olhada:

Improvement is checked, but remains in the Dgv

E quando mudo de linha, finalmente desaparece:

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

Como faço para que ele seja removido imediatamente depois de marcar a caixa de seleção preenchida?

P.S:Sim, tenho o manipulador 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
Foi útil?

Solução

Você pode conseguir isso encerrando a edição do DataRow quando o valor da célula é alterado.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top