Partimos de un DataGrid que contine datos y lo que pretendemos es que según el valor de ciertos campos se cambie el color de toda la fila o de una sola celda. Para ello editamos la propiedad CellFormatting del DataGridView, que en mi caso se llama DataGridView1 y muestra las fechas para el vencimiento del seguro de varios vehiculos y la fecha de la próxima ITV. Tambien hay un columna que registra si el vehiculo esta actualmente en uso o si está apartado de la actividad (es la columna Parado).
Private Sub DataGridView1_CellFormatting(sender As Object, e AsSystem.Windows.Forms.DataGridViewCellFormattingEventArgs) HandlesDataGridView1.CellFormatting
Dim sino As String 'para almacenar si el vehiculo esta activo o no
Dim numfilas As Integer 'contara el numero de filas del DataGrid
Dim AvisoSeguro As Boolean 'para ver si falta menos de un mes para renovar el seguro
Dim AvisoItv As Boolean 'para ver si falta menos de un mes para pasar la ITV
numfilas = DataGridView1.RowCount 'cuenta las filas del DataGrid
For i = 0 To (numfilas – 1) 'recorre las filas del DataGrid
'de la columna "Parado" de la fila (i) extrae el valor True o false (parado o activo)
sino = Convert.ToString(DataGridView1.Item("Parado", DataGridView1.Rows(i).Index).Value)
'si la fecha de renovacion es menor que la fecha de hoy mas 30 dias, AvisoSeguro sera true.
AvisoSeguro = (DataGridView1.Item("FechaSeguroDGVTBC", DataGridView1.Rows(i).Index).Value) < (DateAdd(DateInterval.Day, 30,Date.Now))
'si la fecha de ITV es menor que la fecha de hoy mas 30 dias, AvisoItv sera true.
AvisoItv = (DataGridView1.Item("FechaITVDGVTBC", DataGridView1.Rows(i).Index).Value) < (DateAdd(DateInterval.Day, 30,Date.Now))
'si siño es True el vehiculo esta parado de actividad y el color de fondo de la fila sera grisclaro
If sino = "True" Then
DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.LightGray
End If
'si AvisoSeguro es True cambiamos el color de fondo de la celda para que resalte
If AvisoSeguro = True Then
'si el vehiculo esta inactivo la pintamos de rojo oscuro para que resalte algo menos
If sino = "True" Then
DataGridView1.Rows(i).Cells(3).Style.BackColor = Color.IndianRed
Else
'si no esta inactivo la pintamos de rojo vivo para que resalte sobre las demas
DataGridView1.Rows(i).Cells(3).Style.BackColor = Color.Red
End If
End If
'si AvisoItv es True cambiamos el color de fondo de la celda para que resalte
If AvisoItv = True Then
'si el vehiculo esta inactivo la pintamos de rojo oscuro para que resalte algo menos
If sino = "True" Then
DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.IndianRed
Else
'si no esta inactivo la pintamos de rojo vivo para que resalte sobre las demas
DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.Red
End If
End If
Next 'pasa a la siguiente fila
Notas:
DataGridView1.Item("FechaSeguroDGVTBC",DataGridView1.Rows(i).Index).Value coge el valor de la fila(i) en la columna "FechaSeguroDGVTBC"
DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.LightGray cambia el color de fondo de toda la fila(i)
DataGridView1.Rows(i).Cells(3).Style.BackColor = Color.Red cambia el color de fondo de la celda en la columna(3) fila(i). La primera columna que vemos en el DataGrid es la columna(0)
No hay comentarios:
Publicar un comentario