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.