¿Cómo llenar dinámicamente un combo en Visual Fox Pro 6.0, a través de una sentencia SQL?

Mi problema es que ya intente de varias formas, pero no logro que el combo muestre lo que en realidad necesito.

Tengo una Tabla llamada Pagos.dbf con los siguientes campos:

{idventa, abono, fecha, saldo, idpago}

En mi Interfaz tengo un menú en el que accedo a un formulario llamado modificar pagos, y en este formulario le pido al usuario ingresar un id de venta, que mediante una consulta en SQL muestro en un Grid el resultado de la consulta. Hasta ahí todo bien.

De esa consulta obtengo un "historial de pagos" de acuerdo a un cliente por medio de un id de venta.

La consulta es la siguiente:

&&--------------------------------------------------------------------

&& Consulta id de venta y muestra datos en un grid, a partir de ahí habilita los campos a modificar
WITH THISFORM
.Grid1.RecordSource = " SELECT FECHA,ABONO,SALDO FROM pagos WHERE idventa = val(alltrim(thisform.text1.text)) INTO CURSOR consulta"
DO CASE
CASE _TALLY=0
MESSAGEBOX("ESTE ID DE VENTA NO EXISTE, TECLEE OTRO")
CASE _TALLY<>0
&&Aquí quiero habilitar el combo y posterior realizar la consulta y llenarlo dinámicamente
&&.TEXT4.VALUE=consulta.SALDO
&&.TEXT2.VALUE=consulta.FECHA
&&.TEXT3.VALUE=consulta.ABONO
&&.TEXT4.VALUE=consulta.SALDO
&& mas campos a mostrar aquí
.COMMAND1.ENABLED=.T. && este botón es para cancelar
Endcase
ENDWITH

&&--------------------------------------------------------------------

Lo que necesito es preguntarle al usuario del sistema que registro del Grid quiere modificar.

Tengo 2 ideas:

La primera sería preguntarle por la fecha del pago a través de un combobox (aquí quiero que salga la misma consulta, pero que el combo me lo llene con el campo fecha de la consulta anterior, pero aun no lo logro)

La segunda seria preguntar por el numero de fila del Grid a modificar (también con un combo), es decir preguntar por el id de registro en el Grid, algo así como fecha. Id, y que el usuario seleccione el numero de fila.

Teniendo eso ya puedo habilitar algunos textbox, realizar una consulta por medio del id o del id de venta seleccionado en el combo y mostrar los datos correspondientes a modificar.

Respuesta
1

Es un place saludarte. Espero poder ayudarte.

A ver... viene un poco enredada la pregunta hehe...!

Según entiendo vas a modificar algún registro de tu tabla pagos. Lo que no comprendo bien es lo del grid y la consulta.

¿Cargas el grid en el form de modificación para que el usuario escoja que registro modificar? ¿Es eso? Aclarame para poder ayudarte.

Hay varias formas de hacer las cosas. No solo 1. Ninguna es totalmente buena ni totalmente mala... todo depende de los gustos del cliente. Yo en lo personal, opto por crear un form de consulta para ver, por ejemplo... todo mi catalogo de clientes. Si quiero modificar un registro... doy doble click sobre el registro en el grid y me abre otro form para modificar el registro que seleccione. Por medio del envío de parámetros desde el form de consulta al form de modificación, logro rastrear y cargar los datos del cliente, modifico y luego actualizo o descarto, según sea.

Otra opción, cuando el doble click no puede ser usado (por alguna razón técnica o procedual), diseño un pequñisimo form que me permite rastrear algún dato del cliente.. por ejemplo: estoy en el form de consulta y quiero modificar al cliente código 0001, doy click en un botón... abre un form de rastreo, tecleo 0001 y al dar enter me aparece el nombre del cliente... doy click en aceptar y me abre el form de modificación de ese registro, por medio del envío de parámetros y rastreo del código de cliente 0001. Ves!

Ahora... según veo tu código... y leo tu consulta... se me hace la idea que abrís el form de modificación y cargas el grid ahí. Se selecciona el registro y se cargan en los textos los datos a modificar! ¿Es así? Corregime!

Yo aconsejo no cargar directamente el grid con una sentencia SQL de esa forma. No está mal... pero en mi experiencia es mejor cargar los datos en algún momento o evento o método de tu form y luego enlazar los controles a los datos. ¿Por qué? Mejor arquitectura. Cada proceso por bloques...! En mis forms de consulta... primero se cargan los datos en un método personalizado! Luego se llama ese método desde algún evento predeterminado del form y se cargan los datos. Posterior... se enlazan los controles. Y listo. Cada bloque se ejecutó por procesos separados. Garantiza mejor robustez.

Yo te aconsejo primero generar la consulta select y después asignar el cursor a tu grid por medio de RecordSource del grid y asignando cada columna la propiedad ControlSource según el campo del cursor que quieres mostrar en determinada columna. ¿Me explico? Espero que si.

Tally es una var del sistema muy útil... para saber si el cursor esta vacío o no. Pero ademas... se debe validar, si lo deseas y para ir un poco mas allá de la seguridad normal deq ue los datos son los correctos, que el tipo de datos no es NULL. Puede darse la ocasión que tally devuelva 1 indicando que el cursor si esta cargado. Pero y si algún registro esta con valores nullos... podrás tener un kilombo en tu app.

Para eso, usamos TALLY seguidamente de una "llamado" o enfoque a tu fuente de datos... recordá que tally evalúa según el ultimo comando procesado, pro tanto SELECT cursor debe ir como requisito fundamental para saber que fuente es la que tomaras para evaluar:

SELECT cursor

GO TOP

IF _TALLY = 0

**--El cursor esta vacío

**--No esta vacío

ELSE

**--Evaluamos que el primer dato no sea nulo

IF ISNULL(cursor.campo1)

**--El cursor est cargado pero con datos nulos

*--Esta cargado y no es nulo, procedemos

ELSE

ENDIF

ENDIF

**--//

Saludos Experto, una disculpa por la tardanza en contestar, pero tuve algunos inconvenientes.

La función básica de lo que necesito, es que si por algún "error de dedo" el usuario se equivoca al registrar un abono o pago, me permita mediante un formulario, llamado modificar pago, el usuario modifique el pago o abono, según corresponda.

También quisiera decirte que soy nuevo programando en visual fox pro, y todo lo que tengo es gracias a que me pongo a estudiar un poco en mis ratos libres de como hacer cada cosa. He programado en otros lenguajes (JAVA, C, C++, etc), pero se me complica un poco VFP, creo que debo familiarizarme un poco mas, bueno pero eso lo dirá el tiempo y el esfuerzo que le dedique.

Ahora mi pregunta es, ¿cómo obtengo datos de grid?, Me podrías publicar un ejemplo o mandarme mas información al respecto.

Me dices que genere primero la consulta ¿En que evento?¿Donde y como? ¿La misma consulta o tengo que modificarla?

Posteriormente me indicas: asignar el cursor a tu grid por medio de RecordSource del grid ¿Como hago eso?, me voy a las propiedades del grid y en la propiedad RecordSource ¿que código escribo?

Y por ultimo me dices: asignando cada columna la propiedad ControlSource según el campo del cursor que quieres mostrar en determinada columna. ¿Cómo lo realizo? dentro de las propiedades del grid, busco la propiedad ControlSource y ¿Que código escribo?

Algo como pagos.fecha o cursor.fecha

PostData1.- Me gustaría me enviaras un ejemplo de tu idea, eso del evento double clic.

Tengo un ejemplo en el que modifico datos de los clientes, pero la diferencia y mi dolor de cabeza, es que en clientes solo esta asociado un id de cliente único, pero en pagos, al id de venta, le corresponden varios abonos. (pocos datos en clientes, demasiados datos en pagos) es como si se necesitara de filtros para discriminar la información por un parámetro, que en este caso sería la fecha o id del registro.

Gracias por haberme atendido de manera muy amable, nuevamente te agradezco

PostData2.- Me intriga saber por que tu nickname es raven, según se, es un test psicométrico para medir Cociente Intelectual, la percepción, la inteligencia, entre otras variables psicológicas. Ahora me encuentro estudiando 7° Semestre de la Lic. en Psicología Educativa.

Disculpa la tardanza. Te escribiré la respuesta en 2 o 3 respuestas separadas...

Bien... las cosas en VFP son realmente mas fáciles de lo que imaginas.

A como dices... lo básico es hacer un form de modificación de los datos de tu tabla pagos, así como un form de consulta que te permita visualizar los registros.

La cuestión es que a partir de la consulta vos podas identificar los registros que querrás... y si hay un error, selecciones el registro y podrás abrir el registro en un form que te permita modificar directamente en la tabla. Luego al cerrar... poder ver la actualización. Va eso es fácil:

Primero vamos a hacer funcionar el form de consulta: para eso.. anda en modo de diseño. La lógica es: crear un método personalizado para que escribas código y ahí poder programar un cursor que te permita cargar los datos de tus pagos. ¿Por qué lo hacemos desde un método personalizado? Porque es una buena forma de separar el bloques las distintas funcionalidades de tu programa. Así si hay un error o alguna modificación... ya sabrás que el método "cargardatos" es exclusivo para generar la consulta, el método "guardar" seria exclusivo para programar la actualización de la tabla. Y así...! Esto permite que el código sea mas reutilizable y de formas independientes que no interfieran con otros procesos.

En el form en modo de diseño... anda al menu "Form" del menu y selecciona la opción 2new method". Ahí aparece un cuadro en donde te pide un nombre para el método. escribí el nombre cargardatos y en comentarios.. podes escribir una breve descripción de lo que codificaras ahí, por ejemplo "método para cargar el cursor de consulta". Así no te enredaras... te lo aseguro. Luego guarda el método y salí del cuadro.

Luego... anda a las propiedades del form y en la pestaña "methods" busca la final el método recién creado llamado cargardatos que aparecerá en letras rojas. Dale doble click y abre el editor de código. Ahí vamos a cargar un cursor que sea reutilizable para actualizaciones y asignarlo a tu grid.

La lógica es crear el cursor temporal con tu tabla pagos... luego enlazar el grid de forma programática con la fuente de datos y asignar a cada columna del grid, un campo especifico del cursor. Quita toda propiedad que hayas configurado al grid en la ventana de propiedades, tales como recordsource... y cualquier otra que tenga que ver con datos (la pestaña DATA de la ventana de propiedades exactamente). Coloca el numero de columnas que tenga la tabla, en caso que querrás mostrarlas todas...! Yo usare los campos que me distes (idventa, abono, fecha, saldo, idpago) que son 5. En la propiedad ColumnCount de la pestaña LAYOUT de tu grid, coloca 5.

Ahora... en cargardatos escribimos lo siguiente:

**--Cargamos los datos de la consulta

**--Liberamos el grid para evitar deformación visual al actualizar

THISFORM.Grid1.RecordSource = " "

**--Generamos el cursor consulta

SELECT idventa, abono, fecha, saldo, idpago FROM pagos INTO CURSOR temp1

**--

SELECT temp1

**--Llevamos el puntero del cursor al ultimo registro

GO BOTT

**--Enlazamos el grid

THISFORM.Grid1.RecordSource = "temp1"

**--Asignamos los campos a las columnas especificas

THISFORM.Grid1.Column1.ControlSource = "temp1.idventa"

THISFORM.Grid1.Column2.ControlSource = "temp1.abono"

THISFORM.Grid1.Column3.ControlSource = "temp1.fecha"

THISFORM.Grid1.Column4.ControlSource = "temp1.saldo"

THISFORM.Grid1.Column5.ControlSource = "temp1.idpago"

**--

THISFORM.Refresh

**--//

Y listo. Ahora este método cargardatos se ejecutara 2 veces... al iniciar el form... en el evento INIT coloca

THISFORM. Cargardatos

Y ahí se ejecutara.

Luego.. se ejecutara seguidamente de la modificación de los datos... en caso que querrás ver automáticamente las actualizaciones al editar un registro. Esto es opcional!

Ahora... si lo que deseas es modificar un pago... te enseñare como proceder. Lo básico es tener un campo de identificación único para poder saber que registro vamos a editar. Por ejemplo: yo cuando voy a modificar un registro de un catalogo de clientes... tengo una tabla clientes con varios campos.. entre ellos uno llamado codigocli que es el código por el cual identifico a cada cliente. Cuando voy a modificar... uso ese dato de ese campo para saber que registro es el que se modificara.

En tu caso.. imagino que es idventa. Si vos tenes otro... solo cambia el valor del dato... el procedimiento aplica para cualquier campo identificador de datos... solo ten en cuenta el tipo de datos.

Bien.. ahora la cuestión para modificar es así: desde el form de consulta.. a través del grid vos podes ver los registros. Una buena solución es que al dar doble click sobre el registro o linea del grid.. se abra el form de modificación para ese registro seleccionado y que al modificar y regresar el form de consulta ya aparezca la modificación.

Para tal fin... se debe seleccionar un dato, como te decía anterior, que indetifique el registro de la tabla pagos. Tomaremos idventa. Lo que haremos sera enviar ese dato como parámetro al formulario de modificación. En este formulario... se recibirá este dato y se procederá a rastrear por medio de una consulta. Si el dato es correcto y existe... se cargan los datos del registro en controles que permitan su modificación. Al asegurar la edición, se guarda, actualizando el registro por medio del comando REPLACE con los nuevos datos. Se cierra el form y se vuelve a llamar al método cargardatos de tu consulta.. en donde se renegenera la consulta y ya podrás tomar de tu tabla actualizada los datos mas reales. :)

Antes de pasar a esa parte de la modificación... escribime si para saber si la carga de datos no te dio inconveniente. Cualquier problema o duda o si no te funciono... avisame para verlo antes de entrar en el otro tema. Esperare!

Saludos! :D

Desde Managua, capital de Nicaragua!

Ahhh y mi nick es Ravenn pero con 2 "n". Haha si hay un test, el test de Raven. Yo lo hice cuando entre a trabajar acá en la aduana de mi país. Pero no es por eso. Ravenn era el nombre de la banda de rock grunge que formé y en la que tocaba antes haha! XD

Gracias, lo había hecho de otra forma, pero también lo estoy haciendo como me indicas y también me salio, así es que vamos bien. Creo que te falto indicarme que en las propiedades del Grid establecer lo siguiente:

RecordSource: temp1

RecordSourceType:1 - Alias

Esto lo hice porque si no, no me mostraba nada. Pero todo bien, espero la respuesta de como pasar datos como parámetros al form modificación de la tabla pagos.

Gracias amigo experto.

PD. El código que estaba usando era este (como me habías dicho, no creas que me quede de brazos cruzados):

&&Thisform.Grid1.RecordSource = " SELECT FECHA,ABONO,SALDO FROM PAGOS WHERE idventa = val(alltrim(thisform.text1.text)) INTO CURSOR X2"
&&WITH THISFORM && Hacer lo siguiente en este formulario
&&SELECT X2 && cursor
&&GO TOP
**--El cursor esta vacío
&&IF _TALLY = 0
&&MESSAGEBOX("ESTE ID DE VENTA NO EXISTE, TECLEE OTRO")
**--No esta vacío
&& ELSE
**--Evaluamos que el primer dato no sea nulo
&& IF ISNULL(X2.fecha) &&cursor.campo1
**--El cursor esta cargado pero con datos nulos
&& MESSAGEBOX("DATOS NULOS")
**--Esta cargado y no es nulo, procedemos
&& ELSE
**-- Habilitamos las cajas de texto para modificar los datos.
&&.text2.enabled = .T.
&&.text2.value = X2.fecha
&&.text3.enabled = .T.
&&.text3.value = X2.abono
&&.text4.enabled = .T.
&&.text4.value = X2.saldo
&&.Command2.enabled = .T.
&& ENDIF
&&ENDIF && fin si
&&ENDWITH && Fin de with
**--//

Este código también funciona, pero no pude hacer funcionar el método dblclick, ni tampoco se comparar campos que contengan fechas para hacer una consulta.

Gracias y espero la explicación tan detallada como la que me acabas de dar (con maestría), acerca de como pasar datos del Grid como parámetros a un formulario de modificación de registros de la tabla Pagos.

Muchas gracias

También estaba pensando en el código del botón modificar:

&& procedimiento
WITH THISFORM
V1=.TEXT2.VALUE && almacena los cambios del campo fecha
V2=.TEXT3.VALUE && almacena los cambios del campo abono
UPDATE PAGOS SET FECHA=V1, ABONO=V2;
WHERE id=VAL(ALLTRIM(.text1.TEXT))
MESSAGEBOX("INFORMACIÓN MODIFICADA EXITOSAMENTE")
CLOSE TABLES
&&THISFORM.Refresh
.RELEASE
ENDWITH

Que opinas? es que no se como ocupar el comando REPLACE

Esto aun no lo ocupo, por el problema que aun no domino el tema de como pasar datos como parámetros de un objeto (en este caso un Grid) hacia un formulario, para realizar una consulta con el "idventa" y mostrar los datos relacionados al registro que pertenezca, en varios textbox.

Gracias y Saludos

Esta pagina esta dando algún problema... haha no permite escribir bien.

Lo básico para la modificación de registros y el envío de parámetro es tener un dato especifico a enviar. Por ejemplo... te mencione el caso de la tabla de clientes. Yo tengo un campo llamado codigocli que es donde asigno el código único de cada cliente. Para modificar un registro... lo que se realiza es el envío de ese dato como parámetro de un form a otro.

Visual fox permite el envío de parámetros entre instancias para diversos fines. Los parámetros se reciben siempre en el evento INIT() del form.

Entonces... para modificar un cliente... por ejemplo, el cliente con código 00004, enviamos el dato como parámetro al form de modificación con LPARAMETERS y en el evento init del form se recibe. Se rastrea el código en la tabla clientes y si se encuentra.. se cargan los datos en controles text, grid, edit.. etc. Luego se realiza el cambio o ajuste y se actualiza la tabla... exactamente el registro 00004.

Básicamente así es la lógica.

Para proceder, va así...

Vamos a suponer que el campo idventa es el campo por medio del cual ves que registro vas a procesar. Puede ser cualquier campo que por lo general sea único y que te permita escoger directamente el registro (por ejemplo un código, un nombre, una fecha... etc).

1 - Crea un form para modificar los datos, en el cual colocas los controles que deseas para tal fin. Asegurate que el nombre físico del form sea el mismo que estableces en la propiedad NAME del form. Si tu form se llama "editar.scx", en la propiedad name del form, se debe llamar "editar" (sin comillas). El form debe ser de tipo modal. Busca la propiedad WINDOWTYPE en la pestaña OTHERS de las propiedades del form... y coloca 1 - modal. En la pestaña layout, la propiedad showwindow = 1 - in top level form.

2 - En tu form de consulta de pagos, en donde tenes el grid y desde donde enviaras a modificar un registro... crea un método llamado (ya vimos como se crean) "enviardato" y ahí coloca un código como este:

**--El parámetro a enviar es el idventa que se seleccione con dobleclick

SELECT temp1

LPidventa = temp1.idventa

**--Llamamos al form de edición

IF WEXIST('editar')

ACTIVATE WINDOW editar

ELSE

DO FORM [editar.scx] WITH LPidventa

ENDIF

**--Actualizamos los datos de la consulta

THISFORM.cargardatos

**--//

BIen... con ese código, cargas el parámetro LPidVenta. Ahí se carga el dato del campo idventa que selecciones en el grid al dar dobleclick. Ese dato se enviara al form de modificación. Luego, abrimos el form de edición, asegurándonos de no abrirlo 2 veces con wexist. Si ya esta abierto, lo lleva al enfoque de la venta. Si no existe, lo abre y envía el parámetro con WITH.

Luego... cuando el form de modificación se cierre... se actualizan los datos de la consulta... volviendo a cargar el cursor temporal temp1.

Hola en caso de que la pagina falle me podrías proporcionar las instrucciones en un archivo de texto o documento de Word a cualquiera de mis correos:

[email protected]

[email protected]

PD. Pásame tu correo para enviarte el proyecto ya modificado, cuando pasen los problemas de estabilidad de la pagina publicaremos los resultados obtenidos

¿Qué te parece amigo experto?

3 - Ahora... vamos al form de modificación y en el evento INIT() colocamos al inicio... la primera linea de código por sobre cualquier otra que tengas... debe ser:

LPARAMETERS LPidventa

Con esto ya tenes el parámetro enviado y recibido en el form de modificación editar. Scx.

4 - En el form de modificación, en modo de diseño, vamos al menu FORM y ahora.. en lugar de crear un método, escogemos la opción new property. En una propiedad del form, vamos a cargar el valor del dato que se recibió. Esto para evitar hacer uso de variables publicas. Mientras el form tenga la sesión abierta, la propiedad tendrá el valor y lo podrás usar desde cualquier lugar del form, en cualquier método o evento.

La propiedad tendrá como nombre ppidventa.

Luego das clien en aceptar y ya la tendrás. La podes ver casi al final de propiedades del form, en la pestaña ALL.

5 - En el evento INIT() del form de modificación, debajo de la linea de LAPARAMETERS LPidventa, debajo coloca la asignación del parámetro a la propiedad del form:

THISFORM.ppidventa = LPidventa

Con esto, ya tenemos el valor cargado en la propiedad.

6 - Creamos un nuevo método que se llame buscardato. En el vamos a hacer una consulta select sobre la tabla de pagos para buscar el registro que contenga en el campo idventa el dato que recibimos como parámetro y que tenemos asignado en la propiedad ppidventa.

En el colocamos un código así:

SELECT idventa, abono, fecha, saldo, idpago FROM pagos WHERE idventa = THISFORM.ppidventa INTO CURSOR temp2

**--Si se cargo el cursor

IF USED('temp2')

**--Se cargo el cursor, verificamos que no tenga datos nulos

SELECT temp2

GO TOP

IF ISNULL(temp2.idventa)

**-El dato es nulo, no se puede procesar

MESSAGEBOX("El dato es nulo")

THISFORM.Release

ELSE

**--El cursor esta cargado y no es nulo

**--Asignamos los campos a controles

THISFORM.Text1.Value = temp2.abono

THISFORM.Text2.Value = temp2.fecha

**--Aquí carga el resto de datos.

endif

**--El cursor no se cargo

ELSE

MESSAGEBOX("no se encuentra el registro")

THISFORM. Release

ENDIF

**--//

Ahora... este método buscardato, lo colocamos de ultimo en el evento INIT() del form, debe ser la ultima linea:

THISFORM. Buscardato

**--//

Esos son los pasos básicos. Ahora.. para iniciar el proceso.. vamos al form de consulta y el evento dbclick de cada text1 de cada columna del grid (ya sabes que cada objeto column del grid, trae "encapsulado" un control text") coloca el llamado al método a enviardato

THISFORM. Enviardato

Así llamaras al form de modificación y correrá todo el proceso.

A este punto, debe funcionar, excepto por algún error que haya cometido yo hehe o que los tipos de datos no coincidan... pero todo tiene solución.

Ya si logras ver los datos del registro en tu form de modificación, podes cambiarlos. Luego, ya solo guardars o mejor dicho.. actualizas con un replace.

El comando replace reemplaza los datos actuales de la tabla por datos nuevos que vos indiques. Le podes colocar la clausula FOR para especificar un filtro o condición, que en todo caso seria "reemplaza los datos viejos CON datos nuevos PARA el registro idventa = valor parámetro.

Así:

SELECT pagos

TABLEREVERT(.T.)

REPLACE pagos.campo WITH nuevodato FOR pagos.idventa = THISFORM.ppidventa

**--Acá el resto de campos

TABLEUPDATE(.T.)

MESSAGEBOX("Registro actualizado")

THISFORM. RELEASE

Y listo.

Proba y me das tus consideraciones.

Pues mira... mi correo es

[email protected]

Pero por ahora, no puedo recibir proyectos para revisarlos porque me encuentro en asignaciones especiales en mi trabajo en la aduana y pues no me queda tiempo para revisar. Si puedes escribirme alguna consulta mas especifica al correo...! Y te responderé con mucho gusto! :)

Saludos!

Desde Managua, Nicaragua!

Ravenn :D :D :D

Ok ya hice lo anterior, pero me atore en la parte que me dices lo del encapsulamiento del grid.

"evento dbclick de cada text1 de cada columna del grid"

Puedo entrar al evento dbclick del grid, pero no se como entrar al evento de cada text1 de cada columna del grid, y tampoco entiendo lo del encapsulado creo que es concepto de programación orientada a objetos, pero no recuerdo muy bien.

Podrías darme ayuda en eso, para newbies como yo. Gracias

Ahh si! Es fácil. Dale click al grid en diseño... y en la ventanita de propiedades te aparecen las propiedades del grid. Si te fijas... hay un combobox arribita que te indica el nombre del control "grid1". Dale click al combo y te desplegara los controles que están anidados al objeto grid, en orden. Ahí aparece column1 y abajito anidado su text1, luego column2 y text1.. y así...! Si seleccionas un objeto del combo... te lleva a sus propiedades. Así es mas fácil moverse por todo el form en diseño cuando vas programando :)

Creo que tengo que "jugar" con las propiedades del Grid o no?

Si AllowCellSelection=.F., tengo que utilizar el click o DblClick del grid y no el de los objetos de las columnas.
Si AllowCellSelection=.t. (default), tengo que utilizar el click o DblClick de los objetos de las columnas.

En base a esto creo que debo setear la propiedad AllowCellSelection a .t.(default) para permitir que las celdas del Grid puedan ser seleccionadas y por consiguiente utilice los eventos de los objetos text de cada columna ¿verdad?

Posteriormente creo que debo setear en cada columna

Thisform.enviardato

En caso de que no este en lo correcto, me podrías ayudar.

Gracias

Lo anterior lo investigue en Internet, pero creo tener problemas, la versión de mi Visual Fox Pro es la 6.0, y no se, si estas propiedades estén disponibles en los objetos Grid.

AllowCellSelection

Nota: En la pripiedad ReadOnly = .F. ¿puede ser por esto? (que no aparece la propiedad)

¿Que puedo hacer?

Se me ocurre hacer, en el evento init del formulario contenedor (consulta) algo así:


En el DblClick del grid tengo:

with thisform
.grid1.column1.text1 = enviardato

.grid1.column2.text1 = enviardato

.grid1.column3.text1 = enviardato

endwith

Pero creo que me estoy haciendo bolas

Perdón, no había visto tu ultima respuesta, lo siento es que mi Pc también es bien lenta, jajaja. Lo intento y te digo en un momento como me fue.

Me da el siguiente error:

Properlty BUSCARDATO is not found

al hacer doble clic en cualquier fila del grid

Saludos amigo

Uppss mi error fue de dedo, al crear el método "Buscardato" por equivocación puse "bucardato". Lo corregí en el init del form Modificación y listo.
Cerrare el tema.
Gracias amigo experto!!!
Tu paciencia es inquebrantable.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas