Me gustaría cambiar el color de una fila en particular en mi vista de cuadrícula de datos. La fila debe cambiarse a rojo cuando el valor de columnncell 7 es menor que el valor de columnncell 10. ¿Alguna sugerencia sobre cómo lograr esto?
143
Estaba investigando este problema (así que sé que esta pregunta se publicó hace casi 3 años, pero tal vez ayude a alguien ...) pero parece que una mejor opción es colocar el código dentro del
RowPrePaint
evento para que no tiene que atravesar cada fila, solo las que se pintan (por lo que funcionará mucho mejor en gran cantidad de datos:Adjuntar al evento
El código del evento
fuente
Estás buscando el
CellFormatting
evento.Aquí hay un ejemplo.
fuente
También tuve problemas para cambiar el color del texto: nunca vi cambiar el color.
Hasta he añadido el código para cambiar el color del texto al evento
DataBindingsComplete
paraDataGridView
. Después de eso funcionó.Espero que esto ayude a las personas que enfrentan el mismo problema.
fuente
Algo como lo siguiente ... suponiendo que los valores en las celdas son enteros.
no probado, así que disculpas por cualquier error.
Si conoce la fila en particular, puede omitir la iteración:
fuente
Algunas personas les gusta usar las
Paint
,CellPainting
oCellFormatting
eventos, pero tenga en cuenta que el cambio de un estilo en estos eventos hace que las llamadas recursivas. Si lo usaDataBindingComplete
, se ejecutará solo una vez. El argumento a favorCellFormatting
es que solo se llama en celdas visibles, por lo que no tiene que formatear celdas no visibles, sino que las formatea varias veces.fuente
Puede cambiar
Backcolor
fila por fila utilizando su condition.and esta llamada de función después de la aplicaciónDatasource
deDatagridView
.Aquí está la función para eso. Simplemente copie eso y póngalo después
Databind
fuente
fuente
Esta es mi solución para cambiar el color a dataGridView con bindingDataSource:
fuente
Si se une a una (colección) de objetos concretos, puede obtener ese objeto concreto a través de la propiedad DataBoundItem de la fila. (Para evitar la búsqueda de cadenas mágicas en la celda y el uso de propiedades "reales" del objeto)
Ejemplo de esqueleto a continuación:
DTO / POCO
Enlace a la vista de cuadrícula de datos
luego el controlador de eventos y obtener el objeto concreto (en lugar de un DataGridRow y / o celdas)
fuente
Por lo general, me gusta usar el evento GridView.RowDataBound Event para esto.
fuente
Funciona en Visual Studio 2010. (¡Lo probé y funciona!) Pintará toda tu fila.
datagridview
.CellClick
evento y coloque la siguiente línea de código dentro de él.fuente
No ha mencionado cómo se cambia el valor. He utilizado una funcionalidad similar cuando el usuario ingresa el valor. es decir, entrar y salir del modo de edición.
Usando el evento CellEndEdit de datagridview.
Puede agregar lógica para borrar la notificación de errores de manera similar.
si en su caso, si los datos se cargan mediante programación, el evento CellLeave se puede usar con el mismo código.
fuente
Con este código, solo cambia el color de fondo de las filas donde el valor del nombre de columna es nulo, el color de otras filas sigue siendo el predeterminado.
fuente
Solo una nota sobre la configuración
DefaultCellStyle.BackColor
... no puede establecerlo en ningún valor transparente exceptoColor.Empty
. Ese es el valor predeterminado. Eso implica falsamente (para mí, de todos modos) que los colores transparentes están bien. Ellos no están. Cada fila que configuro en un color transparente solo dibuja el color de las filas seleccionadas.Pasé demasiado tiempo golpeándome la cabeza contra la pared por este problema.
fuente
Aterricé aquí buscando una solución para el caso en el que no uso el enlace de datos. Nada funcionó para mí, pero al final lo conseguí con:
fuente
Si usted es el segundo desarrollador más tonto del planeta (yo soy el más tonto), todas las soluciones anteriores parecen funcionar: CellFormatting, DataSourceChanged y RowPrePaint. Prefiero RowPrePaint.
Luché con esto (durante demasiado tiempo) porque necesitaba anular mi SelectionBackColor y SelectionForeColor en lugar de BackColor y ForeColor cuando estaba cambiando la fila seleccionada.
fuente
fuente