Проблема с обнаружением состояния флажка в DataGridView - PullRequest
5 голосов
/ 03 февраля 2011

У меня есть элемент управления DataGridView в приложении .Net, которое содержит столбец флажок. Я хотел бы, чтобы пользователь мог редактировать флажки. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу определить состояние флажка после того, как пользователь его проверит.

Если флажок был изначально установлен, то он вернется проверенным, как только DataGridViewCheckBoxCell получит фокус. Но, если я снова нажму на флажок и сниму флажок, он все равно вернется. С этого момента он всегда будет возвращать проверенный независимо от фактического состояния флажка, пока не потеряет фокус и снова не получит его.

Аналогичным образом, если флажок изначально был снят, то когда он получит фокус, он вернется без проверки в событии щелчка независимо от того, какое состояние флажка на самом деле.

Вот мой код.

    Private Sub grdTemplates_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdTemplates.CellContentClick
    Dim strValue As String = ""
    Try
        If Me.grdTemplates.Columns(e.ColumnIndex).Name = "colCurrentTemplate" Then
            'The user clicked on the checkbox column
            strValue = Me.grdTemplates.Item(e.ColumnIndex, e.RowIndex).Value

            'THIS VALUE NEVER CHANGES WHILE THE DataGridViewCheckBoxCell HAS FOCUS
            Me.lblTemplates.Text = strValue
        End If

    Catch ex As Exception
        HandleError(ex.ToString)
    End Try

End Sub

Заранее спасибо,

Mike

1 Ответ

4 голосов
/ 03 апреля 2012

Включите это в свой код:

Sub dataGridView1_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs) Handles dataGridView1.CurrentCellDirtyStateChanged
    If dataGridView1.IsCurrentCellDirty Then
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub

Источник: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx

...