Tengo un problema con un Grid.(VFP5)

Buena Tarde. Necesito ayuda.

estoy utilizando VFP5.

Tengo un formulario con un grid. Dicho grid tiene una columna con checkbox. N

tengo una tabla con registros. Dichos registros los filtro en el grid en base al campo checkbox todos los .F.. Cuando cambio dicho valor en el formulario, necesito validar con un botón solamente los registros seleccionados en .T. Y enviar un mensaje. En caso de que hayan seleccionado 2...necesito mostrar dos mensajes. Uno por registro seleccionado.

Cómo puedo hacer eso? Gracias de antemano por la ayuda.

Respuesta
1

No entendí exactamente lo que quieres hacer. Según lo que entendí, te comento:

Tu grid muestra los registros que en el campo mencionado contiene .F., por lo tanto, al momento de seleccionar el campo (marcarlo o ponerlo en .T.) Automáticamente será filtrado cuando te cambies de registro o cuando cuando te muevas en el grid. Y por lo tanto no tendrás el registro disponible para validación.

Mi sugerencia es:

Crea un cursor temporal en memoria con todos los registros de tu tabla original que quieras editar o marcar, incluyéndoles el campo para la marca, algo así:

Select mi_tabla.*, .f. as marca where <aquí la condición de selección de los registros> into cursor mi_tabla_temporal readwrite

Cambia tu grid para que el "record source" sea este cursor. Te recuerdo que el cursor lo tienes que crear en el método load o en el init del formulario, porque de otra manera el grid no te lo reconocerá a menos que lo definas luego específicamente en el grid.

Ya con esto, puedes moverte libremente en el grid sin que desaparezcan los registros marcados en .t. y podrás hacer una validación en un botón fuera del grid.

Si quiere algo más interactivo, por ejemplo, cuando selecciones o marques uno registro, en ese momento se valide si hay otro marcado y le quite la marca al que ya estaba, puedes hacer lo siguiente:

En el método click del checkbox, pones algo así:

if mi_tabla_temporal.marca

vl_recno=recno()

replace all mi_tabla_temporal.marca with .f.

goto vl_recno

replace mi_tabla_temporal.marca with .t.

endif

Con este código te aseguras que sólo haya un registro marcado.

Luego, para guardar los cambios, tienes que "barrer" la tabla temporal para modificar en la tabla real los datos que quieras.

Este método te sirve, porque si quisieras deshacer los cambios, sólo pones un botón que vuelve a cargar los registros en la tabla temporal SIN guardar las modificaciones y no ha pasado nada. Para hacer esto solo tienes que poner en un botón de deshacer algo como:

Select mi_tabla_temporal

delete all

insert into mi_tabla_temporal ;

Select mi_tabla.*, .f. as marca where <aquí la condición de selección de los registros>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas