Seleccionar Fila dentro de Grid al hacer clic

Respuesta de
a
Usuario
Que tal estimados amigos de Todo Expertos. En estos momentos trabajo en un proyecto en VFP9, soy bastante novato en el tema y me esta complicando un formulario de altas bajas y modificaciones de clientes el cual posee campos tipo texto para ingresar y editar los datos de los mismos y botones para navegar los registros. Ahora bien el problema esta en que debo agregar un Grid en donde debo mostrar el listado de clientes, llegado el momento puedo visualizar el cliente en el grid y al hacer clic en el registro correspondiente dentro del grid quisiera que se me habiliten todos los datos de este en los controles textos para poder editarlos. Ya probé de varias formas y ejemplos sin resultados positivos. Si me podes ayudar o brindar un ejemplo de como poder hacerlo desde ya muy agradecido.
Tabla de datos: mis_clientes
Campos: cod_cliente, nombre, apellido, dirección, ..., estado
controles de formulario: thisform.textocod_cleinte,..., thisform.textoestado
controles botones: agregar, eliminar, editar, buscar, primero, siguiente, anterior, ultimo
y el grid: thisform.gridclientes
"o sea lo que necesito es hacer clic en la fila del grid donde se encuentra el cliente de interés y pasar los datos a los textbox para editarlos desde ahí."
Muchísimas gracias
Avatar
Experto
Hola.
 
En realidad los datos que vas a mostrar en los textos no son provenientes del grid sino del origen de datos que uses en el grid. Bueno, esa es la idea, salvo que quieras específicamente usar los text que están en el grid pero lo que se hace siempre es usar los datos que están debajo del grid porque es más confiable.
 
Para esto vamos como a siempre suponer.
 
Suponemos entonces que en tu grid existe una lista de nombres que provienen de un cursor o una tabla que se llama "clientes". El dato de la primera columna del grid entonces proviene de "clientes.nombre"
 
Para hacer lo que solicitas usamos el evento del grid llamado "AfterRowColChange"
 
En este evento simplemente, sin borrar la linea lParameter ponemos:
 
thisform.text1.value=clientes.nombre
 
Si quieres trabajar sobre los datos directamente del grid, porque usas combos o controles más elaborados, pondrías:
 
thisform.text1.value=this.column1.text1.value (por ejemplo, obviamente llevaría el nombre de la columna que vos tengas en tu grid)
 
Ahora, un toque de performance seria, ya que el evento se ejecuta siempre que cambias de fila (row) o columna (col), te conviene guardar algún identificador del registro para que tu procedimiento no trabaje demás si el usuario se desplaza horizontalemte siempre por el mismo registro.
 
En el init del formulario podrías poner a fin de crear una propiedad del formulario que guarde el estado anterior de algún registro.:
 
Thisform.addproperty('anterior',"")
 
Y en el evento afterRowColChange del grid entonces haríamos así:
 
if thisform.anterior#clientes.codigo  &&por ejemplo
    thisform.text1.value=clientes.nombre
    thisform.anterior=clientes.codigo
Endif
 
De esta manera no se ejecutará el código del interior del if mientras no cambie el código del cliente. Cuidado con esto si necesitas actualizar datos por medio de un timer o algo así.
 
Espero haberte ayudado.
Christian
Keystone
www.keystone.com.ar
 
Te invito a visitar mi blog en http://blogkeystone.blogspot.com
Usuario
Excelente tu respuesta amigo me fue de gran utilidad. Muchísimas gracias.