![]() |
Pintar fila completa en un DBgrid segun un dato
Saludos!
tengo un dbgrid al que quiero que se le pinte la fila segun un valor de un campo de su datasource. Por ejemplo: si el campo "habilitado" del datasource es True se pinta de verde clarito. Mirando en los post del foro lo pude hacer con el siguiente codigo :
cuando se dibuja la grilla efectivamente muestra la fila en verde clarito para las filas que cumplen con la condicion. El problema es que cuando selecciono una fila, solo me pinta de verde oscuro la primer columna, no pinta toda la fila. Como puedo hacer para que pinte toda la fila de verde oscuro cuando selecciono la fila? Muchas gracias!! |
Umm me parece que suena a un tipico caso de la propiedad RowSelect=False
Cuando la pones en true y seleccionas una fila esta se selecciona toda. Ves si es por alli el asunto Saludos |
Gracias por responder!!
te comento, la propiedad dgRowSelect esta en True y la propiedad DefaultDrawing esta en falso. |
begin / end
Hola, creo que te falta un begin / end en esta parte:
lo demás creo que está bien... |
Hola!
Mira, lo modifique de esta manera para que las que no cumplen con la condicion las pinte de rojo, agregando los begin y end como decias:
Pero sigue pintando solo la primer columna de la fila seleccionada. puede ser que sea esta sentencia la que lo provoca? osea, al pasar DataCol y column no estoy provocando que pinte solo la primer columna? Gracias a todos por responder e interesarse! :D |
A ver, no estoy seguro, pero no es lo mismo Focused que Selected. Prueba cambiando la condición a
// Saludos |
Yo tuve el mismo problema y lo solucioné así:
Cada vez que entro en el grid, me pinta la fila en rojo si el valor vale 'N' Espero te sirva Josep |
Coincido con Román, creo que en el primer código que pusiste debería bastar con cambiar gdFocused por gdSelected.
El hecho de que lo haga con la primera columna es porque tienes el dgRowSelect a True y en ese caso la columna que toma el foco (por decirlo así) es la primera. Si pones esa propiedad a False, te pasará lo mismo, pero siempre con la columna cuya celda tenga el foco. |
Muchisimas Gracias a todos!!
Primero probe la solucion de Roman ya que era la que me producia menor cambio en el codigo y salio de diez!! De todos modos jafera te agradezco mucho tu aporte. Que al final no haya utilizado tu solucion no le resta merito a tu intencion. Saludos! |
Hola Amigos
Revisando este hilo para sacar un truquito y funciono super.... ahora tengo otra consulta... como se condiciona para pintar las filas de forma intermedia de todo el DbGrid? algo así como pintar las impares... o las pares??? Bueno, esto no esta sujeto a condicion del dato que tiene la Tabla... Salu2:p:D |
En mi caso utilizo una comprobación como esta:
|
Hola.
Aprovechando la propiedad RecNo al igual que Neftali, yo he utilizado esto:
Es una alternativa más ... Saludos. :) |
Cita:
La función Odd debe hacer algo así:
|
Hola Neftali.
Hacen prácticamente lo mismo, aunque evaluan condiciones diferentes. es verdadera si num es par y es verdadera si num es impar. Pero para pintar las filas alternando dos colores cualquiera funciona perfectamente. Saludos. :) |
Cita:
|
Cita:
Hola Neftali Estube provando con esto... y no me ha funcionado... tengo lo siguiente 1.- Ejecuto el codigo en onDrawColumnCell 2.- Cree la variable Num de tipo Int 3.- Cambie DataLink por el nombre del DBGrid 4.- Cambie Config.App.ColorAlternativo por clMoneyGreen En difinitiva... no me da el efecto.... el codigo que uso es asi:
igual.. voy a seguir intentando.. Salu2:p:D |
1 Archivos Adjunto(s)
Revisa el ejemplo que te paso. Nos hemos dejado de indicarle que vuelva a pintar la fila. :o
![]() |
Gracias Neftali
revise el ejemplo.. realice todo igual.... salvo 3 cosas: cambiar el nombre del DBGrid... y de donde se obtienen los colores. lo demás esta igual, pero no se por que no me pinta las filas. si compilo tu ejemplo funciona bien.. pero quizas sea un bug de esos... lo raro es que si quiero pintar las celdas que cumplan una condición si lo hace bien (en otro dbgrid)... este es el codigo que utilizo...
la proxima semana seguiré probando Salu2:p:D y que tengan un buen fin de semana |
¿Sobre qué Base de Datos trabajas y con qué componentes estás probando?
Hay componentes que no implementan el Recno y puede ser que te esté devolviendo -1; En ese caso el pintado no funcionaría. Esta propiedad está pensada para que sea redefinido por los derivados de TDataSet, si los componentes ue usas no la han redefinido no funcionará este código. |
Hay una forma de pintar alternadamente las filas sin depender del número de registro que consiste en calcular la fila a partir de la posición de la celda que se está dibujando (Rect.Top) y la altura de las filas.
No la he encontrado pero creo que es algo como esto:
Creo recordar que era algo más sencillo pues aquí hay que manejar el evento AfterScroll del DataSet que se esté usando. Pero por ahí va la idea. // Saludos |
... y no será que debes de usar el evento OnDrawColumnCell del DBGrid en vez del evento OnDrawCell ?? ;)
|
Cita:
|
Hola.
Estuve viendo el código de roman, y funciona perfectamente. Tanto en el evento OnDrawColumnCell como en OnDrawDataCell. Sólo tuve que cambiar un cast: TExDBGrid(DBGrid1) por TStringGrid(DBGrid1) por que desconozco el tipo TExtDBGrid.
Muy interesante, no conocía esa forma de obtener la fila... ;) Saludos. :) |
Cita:
// Saludos |
Cita:
Saludos. :) |
Cita:
Lo otro, es que el codigo que dejó Neftali, lo revisé varias veces y esta identico.. incluso si compilo el ejemplo de él funciona super... Este es el codigo que utiliza Neftali
Este es el código que inserté yo...
Cita:
Estoy utilizando un Ado_Query
Si utilizo cualquier de estas sentencias para obtener el Num... me entregan el mismo valor... Igual estoy tratando de jugar por si hay algo que no quiere funcionar.. como el color u otra cosa... Tambien comparé diferencia entre los DBGrid del ejemplo de Neftali y el que utilizo yo... y esta todo casi igual... seguiré tratando Salu2:p:D |
Holas
bueno, ahora lo solucione... y lo que tube que realizar es quitar el DBGrid y poner otro... y con eso funciono super... Creo que un insecto anduvo metiendo sus patas por ahí... Gracias a todos por colaborar... Salu2:p:D |
Hola Amigos...
Les cuento que la solucion anteriormente indicada me presenta un problema muy grande (esto es segun yo)... cuando dejo el DBGrid asignado al DataSet y ejecuto el programa todo va bien.. me pinta las filas y todo... Ahora, si al DBGrid le pincho 2 veces para abrir el panel donde se configuran las columnas (que sirve para editar que campos poner y en que formato).... el efecto de pintado de fila intermedia desaparece, e incluso al ingresar al programa el formulario se demora un poco en cargar y cuando carga no muestra las filas pintadas... Existe alguna forma de solucionar esto, ya que me gusta configurar los DBGrid a mi pinta, con las columnas que quiero y con el formato que quiero tambien... Salu2:p:D |
Hola BlueSteel.
¿ Que acción realizas en el editor de columnas ? Yo hice una prueba dejando 2 columnas de las 9 que tiene una tabla y me funciona perfectamente en tiempo de ejecución. Por si te pudiera servir para cotejar, este es el código que use para la prueba:
Saludos. :) |
Cita:
Cita:
|
Hola...
Tengo una consulta con respecto al color de la letra... lo que pasa es que cuando utilizo el siguiente codigo
si bien al color de la fuente le tengo definido el color $00A00000, cuando por codigo cambia el color, le pone color blanco a la fuente, y no se logra distinguir. quise cambiar el color en el mismo codigo, pero me da un efecto intermitente lo que no se ve muy bien. Salu2:p:D |
La franja horaria es GMT +2. Ahora son las 00:00:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi