Datagridview复选框更改行颜色

时间:2013-05-31 19:43:07

标签: vb.net checkbox datagridview colors

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


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”方法,该方法接受行和状态作为参数。那部分工作正常。问题是,当我单击复选框时,该行不会改变颜色。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我错过了一部分代码。经过一些研究,我找到了this source

对于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