Usar grid en form - VisualFoxpro

Hola Sr. Experto Unysoft. De nuevo, quisiera poder consultarle algo muy importante. Hice un form que tiene unos textos y una grid. Los textos tienen como recordsource una tabla, y la grid otra tabla. Entre las tablas establecí una relación por indices. Lo que pasa es que no se muy bien como hacerlo funcionar... Me explico mejor: al querer agregar un registro en el form, clickeo botón nuevo y se pone disponible los textos... Pero el grid permanece boqueado! Como si solo fuera de lectura. Revise las propiedades de readonly, enabled, allowaddnew del grid.. Y pues todo esta bien. Yo se que el grid, es como un browse de la tabla. PRIMERO intente crear todo el form basado solo en una tabla! Y vaya! Funciono! Pero el problema fue que al agregar registros nuevos al grid, los colocaba debajo de registros anteriores! En forms del asistente (con grids), cuando uno agrega un registro nuevo, el grid se pone en blanco... Y cuando se desplaza entre registros, los registros del grid se mueven! CON una sola tabla no pude hacer eso.. Por eso mejor cree 2... Pero ahora llevo días enesto y no se que hacer! Agradecería mucho su consejo! Gracias!
ravenn!

1 Respuesta

Respuesta
1
Es algo confusa la situación !
De todas formas yo comenzaría por verificar el código del evento click de tu botón nuevo. Si agregas un registro en una tabla también debes agregarlo en la otra. Quizás por ese motivo el grid no se habilita.
Comprueba esto y luego me avisas.
Hola Sr. Carlos! Pues es verdad! Es bastante confuso el asunto... le ruego me disculpe si no me supe explicar! En pocas palabras lo que quiero es poder manejar en un form, algunos textos con una tabla y un grid con otra tabla! He comprobado el código de mi botón agregar nuevo y pues esta bien! Intente cambiar la propiedad recordsourcetype a "0" y al dar clic en nuevo, permite colocar el puntero en cualquier columna.. pero al querer escribir, no pasa nada! De verdad que es confuso jaja! Tengo buen tiempo dando vueltas en lo mismo! :(
Le explicare los pasos que seguí: cree 2 tablas, una que sirve para el controlsource de los textos y otra para el grid y las relacione por un campo id. Puse los textos y el grid, establecí las propiedades necesarias y coloque los botones de mi clase así: Agregar nuevo:
Append Blank
Thisform.Refresh()
Guardar:
=TABLEUPDATE (.T.)
THISFORM.REFRESH
Cuando ejecuto, los textos funcionan bien, permite agregar los registros deseados.. pero el grid se queda inaccesible, como si estuviese enabled=.T.! Probé creando un botón aparte para agregar registros solo al grid así: nuevo registro (grid):
SELECT tabladelgrid
APPEND BLANK
Y en guardar:
Tableupdate(. T.,.T., "tabladelgrid")
THISFORM.Refresh
ASÍ funciona... pero al querer desplazar los registros con los btns de desplazamiento (siguiente, anterior..) solo se mueve el puntero en el grid y no en conjunto con los textos! Disculpe si no me puedo explicar muy bien... y por las molestias... solo que tengo interés en aprender... y pues una mano seria muy bien! Saludos!
Ok, ahora está más claro
Para que los textos y el grid se comporten coordinadamente debes hacer lo siguiente:
En el evento click del botón nuevo debes agregar un registro a cada tabla, un registro para la tabla de los text y otro registro para la tabla del grid.
La relación que estableciste mediante los índices te sirve para especificar de qué forma se actualizarán los registros de las tablas relacionadas.
¿Qué tipo de relación creaste?
¿Es una relación de uno a varios y requiere que una de las tablas tenga un índice principal o candidado?
¿La relación entre las tablas está definida en la base de datos o en el Entorno de datos?
De todas formas, para que tus txts se actualicen cada vez que te muevas por el grid debes agregar unas líneas de codigo al evento afterrowcolchange de tu control grid
thisform.txt1.value=(tabla.campo)
thisform.txt2.value=(tabla.campo)
Si me informas estos datos podremos avanzar un poco más
Hola Sr. Carlos! Pues vera... una de las tablas (la que definí como parent, la de los textos) tiene un indice principal y la tabla secundaria (la del grid) tiene un indice regular. La relación la cree en la base de datos, arrastrando el indice principal al regular. Así mismo... en el entorno de datos del form, definí la relación...! En las propiedades de la relación en el entorno, aparece onetomany = .F. Mire en un ejemplo que la relación entre tablas era bastante similar... y en su linea de códigos, en el btn "nuevo" solo tenia una linea :"appendblank" que funcionaba para las dos tablas! Por eso es que yo probé de esa manera... aunque no estoy seguro si hice bien jajaja XD ! SALUDOS!
Te pido disculpas por la demora en responderte. Realmente estuve muy ocupado con un trabajo que debía terminar.
En cuanto a tu consulta, lo que dices es correcto si la relación está definida como tu dices.
Te sugiero que repases la definición de la relación entre las tablas y que verifiques que cuando agregues las tablas al entorno de datos de tu formulario se muestre la relación entre ambas tablas.
Suerte y saludos.
Carlos.
Hola experto Carlos! Ohhh.. no se preocupe... yo comprendo que ustedes, los expertos, son personas muy ocupadas! Mientras tanto.. aproveche para leer sobre el tema y pude crear correctamente la relación y mejorar mi form! Muchas gracias por su ayuda! ES muy bien recibida! Saludos! Atentamente. Ravenn!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas