FoxPress – Abril 2000

 

Añadir Registros a un Grid

 

         

       Por Pedro Pascual

http://www.fpress.com/

 

 

Normalmente estamos acostumbrados a crear registros nuevos en las tablas, pulsando un botón en una barra de menús o bien mediante alguna combinación de teclas, (por ejemplo Ctrl+Y desde el entorno del VFP). Esto suele ser lo habitual a la hora de añadir registros de manera aislada o con relativa poca frecuencia, sin embargo, no resulta práctico en un entorno dedicado exclusivamente a la introducción de datos de forma secuencial. Un ejemplo puede ser el  de la introducción de asientos en un programa de contabilidad, en el cual cada nueva línea supone un nuevo registro y el número de líneas a introducir suele ser bastante grande.

Una forma de hacer más cómoda la introducción de este tipo de datos, es la creación automática de líneas nuevas conforme vamos añadiendo registros. Para ilustrar esta técnica, hemos implementado una sencilla rutina en un Grid que nos agrega una nueva línea a éste cuando necesitamos un registro nuevo.

El ejemplo es bastante simple. Hemos creado una tabla con tres campos: nombre, apellido y teléfono. A continuación hemos generado un formulario con un Grid normal de tres columnas, cada una de las cuales está asociada a un campo de la tabla anterior, y un botón para salir. Si ejecutamos el formulario tal como está, veremos un Grid normal en el que podemos movernos por la tabla y modificar los campos. Lo que nos interesa ahora es poder pasar de línea conforme nos movemos por los campos, de tal modo que al validar la última columna, pasemos a la primera columna del registro siguiente si es que existe, y que, en caso de encontrarnos en la última línea, nos aparezca automáticamente una nueva línea en blanco en la que seguir añadiendo datos.

Para conseguir esto, hemos seguido los siguientes pasos:

1. Añadir al formulario una nueva propiedad llamada ultimo_registro .

2.En el Init() del form insertar las líneas:

Go Bottom

ThisForm.Ultimo_registro = Recno()

Go Top

 

3. En el código del evento BeforeRowColChange() del Grid escribimos:

LPARAMETERS nColIndex

 

If nColIndex = This.ColumnCount ;

And LastKey()=9

This.Column3.Text1.Valid()

lcFila = This.ActiveRow

If ThisForm.ultimo_registro=Recno()

            append blank

            ThisForm.ultimo_registro=Recno()

            This.SetFocus

Else

This.ActivateCell(lcFila+1,1)

      Endif

Endif

 

4. El evento AfterRowColChange() del Grid quedaría:

LPARAMETERS nColIndex

 

If "3"$GetFldState(-1)

This.ActivateCell(This.ActiveRow,nColIndex)

Endif

5.Por último, podemos controlar si se guardan o no las modificaciones desde el evento Destroy() del formulario:

Respuesta = MessageBox ('¿Guardar   Cambios?',4+32,'')

If Respuesta = 6

      = TableUpdate(.T.)

Else

      = TableRevert(.T.)

EndIf

Con éste código, el Grid tiene todas sus funciones habituales con la novedad de que la tecla TAB  nos permite avanzar por los campos y saltar de registro al llegar a la última columna de cada línea. Además, al pulsar esta tecla desde la última columna del último registro, se crea automáticamente un nuevo registro en el que podemos seguir insertando datos. 

Nótese que para que la actualización de los datos se efectúe correctamente, debemos asegurarnos que en el entorno de datos del formulario, hemos asignado a la tabla del ejemplo algún tipo de almacenamiento en búfer. De lo contrario no podríamos usar la función GetFldState(). Por otro lado, la asignación que hemos hecho de la tecla TAB para pasar de campo y crear nuevos puede personalizarse a la tecla que se prefiera, sin más que cambiar el código de la tecla donde aparece LastKey() = 9 en el evento BeforeRowColChange().

 

 

FoxPress – Abril de 2000

© 1993-2000 FoxPress. All rights reserved