Resaltar Filas En Grid De Visual Fox Pro

Hola Expertos necesito de su ayuda, mi idea es resaltar las filas de un grid el cual tiene datos de un cursor. Bueno les muestro el código para ser más clara:
= fcnConsulta('tbBuzon','*','','tmpBuzon')   
    INDEX ON Usuario TAG Usuario
    SCATTER MEMVAR MEMO    
    WITH .Grid1
        .RecordSource = 'tmpBuzon'
        .Column1.ControlSource = 'tmpBuzon.Usuario'
        .Column2.ControlSource = 'tmpBuzon.Fecha'
        .Column3.ControlSource = 'tmpBuzon.Asunto'
        .Column4.ControlSource = 'tmpBuzon.TipoMsg'
        .Column5.ControlSource = 'tmpBuzon.Status'
        .SetAll("DynamicBackColor", ;
        "IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) ;
, RGB(0,255,0))", "Column") && Alterna registros blancos y verdes.
    ENDWITH
Como se muestra este código llena el grid con datos de un cursor, entonces en este cursor llamado tmpBuzon hay un campo Status, y quisiera comparar los valores del este campo para resaltar las filas del grid.
He buscado y encontré el siguiente código:
  "IIF(tmpBuzon.Status = 1, RGB(255,255,255) ;
, RGB(0,255,0))", "Column") && Alterna registros blancos y verdes.
¿Pero Visual Fox no me lo acepta que puedo hacer al respecto?. De ante mano les agradezco las sugerencias y ayuda que me pudieran proporcionar

1 Respuesta

Respuesta
1
Pues me parece muy raro tu caso, el código parece estar bien. Yo lo probé copiando exactamente lo que escribiste y funciona, pienso que tal vez te olvidaste de incluir el nombre de la propiedad ("DynamicBackColor") antes del "IIF(..." cuando llamas al método [SetAll()], o tal vez solo te falta actualizar el [Grid] después de ejecutar la instrucción. Yo incluso lo he hecho sin poner la clase ("Column") y ha funcionado.
WITH ThisForm.Grid1
        .SetAll("DynamicBackColor", "IIF(tmpBuzon.Status == 1, RGB(255, 255, 255), RGB(0, 255, 0))")
        .Refresh()
Endwith
Si aún no funciona, habría que ver cuáles son los resultados que obtienes o por qué dices que Visual Fox no lo acepta..
Suerte.
Gracias por tu ayuda, de hecho ya lo tenia funcionando perfectamente pero fallo de repente y me marca que la propiedad DynamicBackColor no es valida el código es el siguiente:
WITH .Grid1
.RecordSource = 'tmpBuzon'
.Column1.ControlSource = 'tmpBuzon.Usuario'
.Column2.ControlSource = 'tmpBuzon.Fecha'
.Column3.ControlSource = 'tmpBuzon.Asunto'
.Column4.ControlSource = 'tmpBuzon.TipoMsg'
.Column5.ControlSource = 'tmpBuzon.Status'
.SetAll("DynamicBackColor", ;
"IIF((tmpBuzon.Status)= 1, RGB(255,84,53) ;
, RGB(255,255,255))", "Column")
.SetAll("DynamicForeColor", ;
"IIF((tmpBuzon.Status)= 1, RGB(255,255,255) ;
, RGB(0,0,0))", "Column")
endwith
Al iniciar el formulario si colorea correctamente los grids el problema es que al guardar limpio el recordsource del grid y ahí me marca el error y ya no colorea los registros. ¿Tienes alguna idea de porque hace esto?
Gracias ...
Oh, debe ser porque al momento de limpiar el [RecordSource] supongo que cierras tu Cursor (tmpBuzon), y como en la instrucción tu haces referencia al Campo Status de dicho Cursor, al no encontrarlo, te manda un error. ¿Es esa tu situación? Me parece que el problema va por ahí..
Si no es así, trata de decirme cuál es el código que estas usando al momento que te manda el error.
Efectivamente limpio el recordsource del grid y cierro el cursor
WITH .Grid1
STORE '' TO .RecordSource
ENDWITH
IF USED('tmpBuzon')
USE IN tmpBuzon
Endif
***
Aquí va otra vez el código de consulta para llenar el grid
Yo hice pruebas haciendo referencia a una tabla que no existe y el error que me manda varias veces es algo así (en inglés):
"Expression is invalid. Use a valid expression for DYNAMICBACKCOLOR property."
Si tu ves el mismo error, entonces creo que es porque el programa no encuentra el campo "Status" o éste no es del tipo de dato correcto (numérico en este caso). Puedes checar la estructura del Cursor al momento en que te manda el error, tal vez veas ahí el problema..
Si, de hecho eso era, lo que hice fue dejar de cerrar los cursores que necesito
Estoy manejando dos cursores 1 al iniciar el cursor y al insertar un nuevo registro guardo los datos y mando llamar un método que haga la consulta de la tabla pero a otro cursor para no tronar el primero entonces como vuelvo a llenar el grid con el segundo cursor también le tengo que especificar que coloree las filas del grid, ¿pero qué crees?. ¿Al hacer esto pues me actualiza el cursor y llena el grid pero no colorea las filas y no me marca error como ves? Ahí si ya no se que hacer. No se me hace lógico. Saludos.
Yo pienso que puedes usar un solo Cursor, pero no lo cierres, simplemente cuando lo vuelvas a generar, asegúrate de volver a configurar el [Grid]. No se como estés generando tu Cursor, pero creo que lo mejor es hacerlo con una instrucción [SELECT - SQL], mira, baja este ejemplo:
http://rapidshare.com/files/146707916/GridEje.rar.html
Espero le entiendas, y te sirva en lo que estas haciendo..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas