.net - una - ¿Cómo puedo resaltar la celda actual en un DataGridView cuando SelectionMode=FullRowSelect?
selectedrows datagridview c# (4)
Tengo un DataGridView editable con SelectionMode configurado en FullRowSelect (por lo que toda la fila se resalta cuando el usuario hace clic en cualquier celda). Sin embargo, me gustaría que la celda que actualmente tiene foco se destaque con un color de fondo diferente (para que el usuario pueda ver claramente qué celda están a punto de editar). ¿Cómo puedo hacer esto (no quiero cambiar el SelectionMode)?
Descubrí una forma mejor de hacerlo, usando el evento CellFormatting:
Private Sub uxContacts_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles uxContacts.CellFormatting
If uxContacts.CurrentCell IsNot Nothing Then
If e.RowIndex = uxContacts.CurrentCell.RowIndex And e.ColumnIndex = uxContacts.CurrentCell.ColumnIndex Then
e.CellStyle.SelectionBackColor = Color.SteelBlue
Else
e.CellStyle.SelectionBackColor = uxContacts.DefaultCellStyle.SelectionBackColor
End If
End If
End Sub
Desea utilizar el método DataGridView RowPostPaint. Deje que el marco dibuje la fila, y luego retroceda y coloree en la celda que le interesa.
Un ejemplo está aquí en MSDN
Para mí, CellFormatting
hace el truco. Tengo un conjunto de columnas que uno puede editar (que hice aparecer en un color diferente) y este es el código que utilicé
Private Sub Util_CellFormatting(ByVal Sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvUtil.CellFormatting
If dgvUtil.CurrentCell IsNot Nothing Then
If e.RowIndex = dgvUtil.CurrentCell.RowIndex And e.ColumnIndex = dgvUtil.CurrentCell.ColumnIndex And (dgvUtil.CurrentCell.ColumnIndex = 10 Or dgvUtil.CurrentCell.ColumnIndex = 11 Or dgvUtil.CurrentCell.ColumnIndex = 13) Then
e.CellStyle.SelectionBackColor = Color.SteelBlue
Else
e.CellStyle.SelectionBackColor = dgvUtil.DefaultCellStyle.SelectionBackColor
End If
End If
End Sub
Pruebe esto, el método OnMouseMove:
Private Sub DataGridView1_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove
If e.RowIndex >= 0 Then
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.SelectionBackColor = Color.Red
End If
End Sub
Private Sub DataGridView1_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave
If e.RowIndex >= 0 Then
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.SelectionBackColor = DataGridView1.DefaultCellStyle.SelectionBackColor
End If
End Sub