Automatizar selección y acciones sobre filas grid

¿Hola, qué tal?
Necesito ayuda urgente, les comento la situación:
Estoy desarrollando un sistema en Visual FoxPro 7.0, ya tengo la base de datos (en foxpro) y las clases creadas (formularios, pageframes, botones, grids, etc), ahora estoy integrando en mi primer formulario las clases necesarias y ya tengo la interfaz casi completa.
En mi grid (que ya esta vinculado a una tabla y muestra los datos en tiempo de ejecución) quiero que quede de solo lectura, es decir tengo:
AllowAddNew: .F.
ReadOnly: .T.
Pero que me permita que al dar un click (seleccionar) sobre cualquier parte de un elemento (row) me seleccione toda la fila, para eso tengo las propiedades:
Highlight: .T.
HighlightRow: .T.
Y que al dar doble click sobre esa fila (cualquier elemento text del row) me abra un formulario que realice una consulta con el valor de la primera columna de la fila seleccionada del grid, es decri, que al seleccionar con doble click una fila me abra un formulario (que ya lo tengo) con los valores "detallados". He estado investigando sobre esto y he encontrado la siguiente solución:
Que dentro del código de cada subelemento del grid (grdDatos.colCodigo.text1...) en su método dblClick llame al formulario (Do FORM frmDatos).
Lo que no se es como poner la condición where en la consulta haciendo referencia al valor que contiene la columna 1 de la fila seleccionada que contiene mi ID.
Otra situación es que a diferencia de los métodos que he encontrado, no quiero hacer la codificación de elemento por elemento (que me toque programar cada text del gird) ya que es un grid dinámico que va a estar en constante modificación y si se crea un nuevo elemento quiero que automáticamente quede configurado para que tenga la funcionalidad deseada, es decir, sin importar que elemento sea, quiero que haga lo mismo.
De hecho la aplicación va a quedar sin registros, ya que se tiene contemplada una migración de datos y por eso ahora solo me interesa que quede listo para que al ingresar los registros a la tabla, todos sean capaces de llamar al frmDatos con sus datos detallados respectivamente.
Les agradezco muchísimo su atención y espero me puedan ayudar, les dejo mi correo personal para cualquier situación [email protected]
PD. Aunque tengo experiencia programando, soy algo nuevo en Visual FoxPRO, por lo cual les ruego me ayuden casi con "peras y manzanas" (con conceptos generales de programación, es decri, que no sean tan avanzados ni exclusivos de foxpro)
Hasta pronto, gracias!

1 Respuesta

Respuesta
Utiliza el evento DBLclick del Grid desde allí puedes llamar el formulario y puedes pasarle los datos es algo más o menos así:
Do form "NombreForm" with AliasdeTabla.Nombredecampo,AliasdeTabla.Nombredecampo2
Puedes pasar tantos datos como desees, Pero tienes que colocar en el Evento init del formulario a llamar un código más o menos así: Lparameters cod01, cod02, cod03
Puedes pasar tantos datos como desees, Pero tienes que colocar en el Evento init del formulario a llamar un código más o menos así: Lparameters cod01, cod02, cod03
Pero ten presente Que si Le pasas al formulario 10 datos en el evento init del formulario al que se llama tienes que tener las misma lista de Lparameters.
Ejemplo:
Si llamó a un formulario así:
Do form "Nombredeform" With Dato0, Dato1, Dato2, Dato3
En el Evento init del formulario que llamé tendria que tener algo así:
Lparameters _dato0, _dato1,_dato2,_dato3
Y para aplicar los valores a los textbox solo colocas algo como esto:
Thisform.nombredeltext.Value=_dato0
Espero te sirva... No dudes en preguntar si no entiendes algo
***Suerte***
Hola, primero quiero agradecer tu respuesta y atención.
No me queda claro, creo qeut ampoco me explique bien, El grid que te comento tiene los datos de origen en una tabla de la BD, voy a insertar datos desde el browse o a importarlos de excel o de otra manera (ya veré cual es más eficiente dependiendo del numero de datos). El usuario final tendrá la facultad de insertar registros (por medio de SQL desde un botón). Como cada registro tiene un identificador único (primera columna) quiero que se asigne automáticamente al insertar un nuevo dato. Pero en el grid no se muestran todos los campos (atributos de la tabla), unicamente los principales, y si el usuairo desea ver detalladamente la informacion del registro tendrá que dar doble click para que se abra el formulario de consulta (que es un formulario con text de cada campo de la tabla y en lugar de asignarle datos, los va a leer de la BD; por ejemplo si tengo el grid de la imagen muestra 6 atrbutos, pero se alimenta de una tabla de la BD de 8 campos, solo muestro los mas relevantes, pero si el usuario desea ver los demas campos tiene que abrir el registro (me gustaria que fuera con DBlClick para facilitar la interaccion con el sistema), para que se muestre un formulario (frmDatos) que contiene 8 labels y 8 text deshabilitados (cada uno muestra la informacion de un campo de la tabla, quiero que lo haga por medio de una consulta SQL: "select * from bd!tabla where tabla.id = valor_primera_columna_grid_del_elemento_Seleccinado)".
Ya si el usuario desea modificar el elemento mostrado en frmDatos, tendrá que presionar un commandbutton ubicado en frmDatos, el cual solo habilita los text (excepto el id) y permite al usuario escribir en los campos que contienen la información del registro abierto y posteriormente dar click en un botón "guardar" que realiza un update en la BD con los nuevos datos del frmDatos.
Esa es la funcionalidad que deseo. Como me comentas me serviría, pero tendría que tener un control de los registros que tengo para ver cuantos parámetros tengo, ¿no?
Y la verdad no quiero que sea así, ya que yo solo estoy diseñando la aplicación y el usuario la va a manipular desde la interfaz (no se le va a modificar al código). Ademas la tabla de la bd va a contener demasiados registros y el usuario va a poder borrar e insertar como lo desee. Por eso me gustaría ver si tienes alguna otra opción o sugerencia que me pueda servir para cumplir con el objetivo deseado.
Otra que había contemplado era que cuando se quisiera realizar una consulta, se diera click sobre un botón consulta y me desplegara un form que me pidiera el id del elemento que deseo consultar, pero esto no haría de la aplicación "tan amigable" como lo deseo.
De verdad que te agradezco tu atención, espero me puedas echar la mano a pesar de que estoy complicando todo, je je.
Hasta luego, saludos!
Lo que tienes que saber es la cantidad de campos en la tabla y los nombres, de allí a pasar los parameters no es tan complicado. Con solo que sepas la cantidad de Campos de la tabla para que puedes pasar esa cantidad de parameters con eso te funcionaria bien.
Aunque podrias pobar colocar en el init del cada text del formulario un codigo más o menos así: This.Value=Nombretabla.nombrecampo
***Suerte***
Ok, pero hay algún modo de saber el numero de campos en la tabla y los nombres de manera automática, ¿qué se actualice constantemente y que no requiera ninguna acción del usuario?, es decri lo que quiero es que en cuanto a codificación, el programa quede listo (terminado) y no se tenga que modificar nada (automático), para que el usuario haga y deshaga con los registros de la BD y no influya en la funcionalidad y se comporte siempre igual con cualquier registro (nuevo, modificado, etc) Realmente no me importa mucho el método del "como", pero si quiero que se comporte como te menciono en la aclaración anterior, o al menos de manera similar si es que no es posible como quiero. De verdad que estoy bloqueado. Si me gustaría que me ayudaras indicándome si es posible lo que quiero o si se te ocurre alguna otra manera que cumpla con el objetivo. Todas las sugerencias, correcciones comentarios son bienvenidos.
En la otra opción que me comentas de "cada text del formulario" es para la lectura, ¿no?. Con eso no tengo problema aún, pero si con la función que me va a desplegar dicha información.
Muchas gracias por tu atención y tiempo
Hola de nuevo. Ya encontré la solución, fue más sencillo de lo que me hubiera imaginado, te agradezco muchísimo tu atención.
Hasta luego, saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas