Los ejemplos que vienen con la documentación de la ayuda en el método SetAll muestran cómo hacer cambiar las filas basándose en la ejecución sencilla de un IIF (If inmediato) como por ejemplo:
Thisform::Init
*** Alternar columnas entre blanco y verde ***
Thisform.MyGrid.SetAll("DynamicBackColor", ;
"IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255), RGB(0,255,0))", ;
"Column")
Hasta aqui puede ser sencillo, pero que tal si deseas tener mas de 2 o 3 colores?, o si es un número finito de posibles colores?, la solución es mandar a ejecutar una función o método que haga lo propio.
Un ejemplo de uso, un form donde se colorean las lineas del grid de acuerdo a la edad de la persona:
Public oForm
oForm = Createobject("myForm")
oForm.Show()
Define Class myForm As Form
DataSession = 2
Height = 400
Width = 600
Add Object myGrid As Grid With ;
Height = 400, Width = 600, RecordSource="employee"
Procedure Load
OPEN DATABASE (HOME(2)+"\data\testdata.DBC")
Use employee
Endproc
Procedure Init
This.MyGrid.SetAll("DynamicBackColor","Thisform.MyColorByYear(birth_date)","Column")
Endproc
PROCEDURE myColorbyYear
LPARAMETERS tdBirthDate
lnColor = 0xFFFFFF && Blanco por default
lnAnnios = YEAR(DATE())-YEAR(tdBirthDate)
DO CASE
CASE BETWEEN(lnAnnios,20,40)
lnColor = RGB(100,100,150)
CASE BETWEEN(lnAnnios,41,45)
lnColor = RGB(255,255,0)
CASE BETWEEN(lnAnnios,46,50)
lnColor = RGB(255,100,0)
CASE BETWEEN(lnAnnios,51,60)
lnColor = RGB(255,0,0)
CASE BETWEEN(lnAnnios,61,90)
lnColor = RGB(0,255,0)
ENDCASE
RETURN lnColor
ENDPROC
PROCEDURE Unload
CLOSE TABLES ALL
CLOSE DATABASES ALL
ENDPROC
Enddefine
En este caso está establecido a sólo 5 colores, pero podría llevarse hasta el caso en que se utilice una tabla auxiliar donde se tengan almacenados estos datos, para de esta forma darle aún más dinamicidad a esta función.
Espero les sea de utilidad.
Espartaco Palma Martínez
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.