Problemas con el grid de visual FoxPro

Quiero sombrear las lineas del grid, pero en todos los ejemplos que he encontrado se utiliza el recno() para saber si la linea es par o impar con este formato
this.SetAll("DynamicBackColor", "IIF(MOD(this.ActiveRow, 2)=0, RGB(236,233,216), RGB(250,255,255))", "Column")
Pero en una tabla que se indexa de varias formas esto no me sirve porque el primer dato puede ser el ultimo de la tabla y el sombreado se muestra mal.
¿Hay alguna forma de que se cuenten las lineas del grid sin que sean las del record de la tabla?, ya que puedo ordenar la tabla de diferentes formas, pero las lineas del grid deben tener siempre un mismo valor independiente del valor asociado de la base de datos considerando solo las lineas del grid. No he encontrado ningún ejemplo de ello y creo que seria lo más normal pues lo menos probable seria usar una tabla sin orden, pero no encuentro una manera de usar un contador de lineas o una variable que haga esta función
Gracias de antemano

1 respuesta

Respuesta
1
Simplemente coloca en tu tabla un campo numérico y cada vez que grabes un registro y en ese campo graba el recno asignado.
Y para el efecto de mostrar los rtegtistrtos pares de un color y los impares en otro color utiliza el vallor de este campo y solucionado el problema
En primer lugar muchas gracias por responder, pero esto seria válido en una base de datos pequeña donde cada vez que se ordena de una forma diferente se pondría el numero del orden pero el problema es que la base de datos es grande y esta ordenada por varios campos en un caso por nombre, por ciudad, etc etc, y en el grid se puede seleccionar el orden desde su misma cabecera, por tanto si ordeno por nombre el primer registro comienza por la A por ej. pero el recno() en la base de datos seria por ej. el 2300 y si ordeno por otro concepto el recno() seria el mismo pero el orden cambiaría por ejemplo al final o en el medio de la tabla, y el sombreado seria arbitrario, me hacia falta una función que leyera las lineas del grid, no de la base de datos, para que el sombreado sea correcto pues entonces la primera linea del grid seria sombreda con un color y la segunda con otro color y así sucesivamente, pero sin considerar que datos se muestran, ademas no siempre se muestran todos los valores, pues en ocasiones se muestran filtrados y esto desordena de nuevo la base de datos, por eso debe usarse algo relacionado con el grid y no con la base de datos.
De nuevo muchas gracias
Parece que no me has entendido la idea. Se trata de crear un campo control dentro de la misma tabla en el cual se graba el recno() que le asignaron a ese registro, este ordenada o no la tabla siempre va a permanecer ahí y como te dije, el pintado de las celdas de tu grid lo haces teniendo enc uanta si el numero es par o impar.
Bueno de nuevo gracias, pero te repito, así no se puede sombrear correctamente si filtras u ordenas por diferentes conceptos, eso que me planteas es igual a usar el recno(), pero ya se como se hace y es creando una matriz con el ordenamiento actual, cada vez que ordenas actualizas la matriz con el nuevo indice y relacionando estos datos con la matriz que esta fuera de la base de datos, incluso con bases grandes el trabajo es muy rapido, como tu lo dices en este campo habría que sustituir el campo por el ordenamiento, esto es mucho más lento y ademas la base de datos tendría un campo de más sin ninguna función practica, solo la de ordenar. Yo probé usando este método y es mucho más rapido y sencillo, te envío el código, hay que correrlo cada vez que se ordena o filtra por un nuevo concepto.
SELECT datos
Public pMatriz(reccount())
Go top
Lb =.f.
Scan
  Lb =! Lb
  PMatriz(RECNO()) = lb
EndScan
Go top
Thisform.grid.SetAll ("DynamicBackColor", "IIF(pMatriz(RECNO()), RGB(236,233,216), RGB(200,205,255) )", "Column")
De nuevo gracias por responder

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas