0

我正在更改行颜色,具体取决于是否单击了复选框。如果单击该复选框,则该行被视为“关键”,因此我调用一个对其应用红色的方法。


Private Sub dgvAssemblies_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAssemblies.CellContentClick, dgvExpeditions.CellContentClick, dgvMachines.CellContentClick
    Dim s As DataGridView = sender
    If s.Columns(e.ColumnIndex).Name = s.Name.Remove(0, 3) & "ColChkCritical" Then
        If s.Rows(e.RowIndex).Cells(e.ColumnIndex).Value Then
            FormatRowColor(s.Rows(e.RowIndex), "Critical")
        End If
    End If
End Sub

以下代码调用接受行和状态作为参数的“FormatRowColor”方法。那部分工作正常。问题是,只要我单击复选框,该行就不会改变颜色。

我错过了什么吗?

4

1 回答 1

0

我错过了一部分代码。经过一番研究,我找到了这个来源

对于 a 中的点击DataGridViewCheckBoxCell,此事件发生在复选框更改值之前,因此如果您不想根据当前值计算预期值,您通常会DataGridView.CellValueChanged改为处理该事件。因为该事件仅在提交用户指定的值时发生,通常在焦点离开单元格时发生,所以您还必须处理该DataGridView.CurrentCellDirtyStateChanged事件。在该处理程序中,如果当前单元格是复选框单元格,则调用该DataGridView.CommitEdit方法并传入 Commit 值。

CurrentCellDirtyStateChanged

当单元格的状态随其内容的变化而变化时发生。

Private Sub dgvAssemblies_CurrentCellDirtyStateChanged(sender As Object, e As System.EventArgs) Handles dgvAssemblies.CurrentCellDirtyStateChanged, dgvExpeditions.CurrentCellDirtyStateChanged, dgvMachines.CurrentCellDirtyStateChanged
    If sender.IsCurrentCellDirty Then
        sender.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub
于 2013-05-31T19:43:07.327 回答