سؤال

الهدف

أنا بحاجة إلى وسيلة لضبط العناصر الانتهاء من خلال الضغط على CheckBox في بلدي لا بد DataGridView.بمجرد أن يتم ذلك ، البند لم يعد ينظر إليه من DataGridView بسبب DataView'ق صف مرشح.


تفسير

لدي DataGridView منضم إلى DataView.

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

هذا DataView's إعداد طاولة التالية DataTable:

DataTable showing Primary Key and Boolean Value (in red)

هذا DataTable يحتوي المفتاح الأساسي تعيين الحقل الصحيح.على Completed حقل مربع أحمر فقط أن أريكم أن أضع على أنها قيمة منطقية.

نلقي نظرة على بلدي DataGridView:

DataGridView showing the result of the bound items

هنا حيث كنت سوف انقر على مربع الاختيار و هذا البند يجب أن تحصل على تصفيتها (لأن الاختيار مشاهدةجميع لم يتم التحقق)


المشكلة

عندما اضغط على CheckBox البند يبقى في DataGridView.من أجل الحصول على تصفيتها ، يجب تحديد صف آخر.نلقي نظرة:

Improvement is checked, but remains in the Dgv

و عندما أقوم بتغيير الصفوف تذهب في النهاية:

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

كيف يمكنني الحصول عليه لإزالة نفسها على الفور بعد أن راجعت الانتهاء من الاختيار?

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
هل كانت مفيدة؟

المحلول

يمكنك تحقيق ذلك من خلال إنهاء تحرير من 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top