我正在更改行颜色,具体取决于是否单击了复选框。如果单击该复选框,则该行被视为“严重”,因此我调用了一种对其应用红色的方法。
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”方法,该方法接受行和状态作为参数。那部分工作正常。问题是,当我单击复选框时,该行不会改变颜色。
我错过了什么吗?
答案 0 :(得分:0)
我错过了一部分代码。经过一些研究,我找到了this source。
对于DataGridViewCheckBoxCell
中的点击,此事件发生在复选框更改值之前,因此如果您不想根据当前值计算预期值,则通常会处理DataGridView.CellValueChanged
事件而不是。由于该事件仅在提交用户指定的值时发生(通常在焦点离开单元格时发生),因此您还必须处理DataGridView.CurrentCellDirtyStateChanged
事件。在该处理程序中,如果当前单元格是复选框单元格,则调用DataGridView.CommitEdit
方法并传入Commit值。
当单元格的状态相对于其内容的变化发生变化时发生。
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