FoxPro/Visual FoxPro - GRID

 
Vista:
sin imagen de perfil

GRID

Publicado por Carlos (49 intervenciones) el 18/09/2017 23:02:19
HOLA A TODOS, ESTOY INICIANDO UNA APLICACIÓN Y ME HA SURGIDO UNA DUDA., SOY NUEVO EN VISUAL FOXPRO, TENGO UN GRID EL CUAL LO LLENO POR MEDIO DE UNA SENTENCIA SQL.- POR LO QUE EL RecordSource ESTA COMO 4 - Sentencia SQL.-

LUEGO POR EL CLIC DE UN BOTON DE COMANDO EJECUTO LA SENTENCIA Y LA ENVÍO AL RecordSource DE MI GRID.-

HASTA AHÍ TODO PERFECTO LLENA PERFECTAMENTE MI GRID.-

AHORA LO QUE YO QUIERO ES HACER Doble Clic EN UNA FILA DE MI GRID Y QUE ME EJECUTE UNA CONSULTA.- POR EJEMPLO MI GRID SE LLENA CON COMPROBANTES DE VENTA Y QUIERO HACER Doble Click EN EL GRID Y EFECTUAL LA CONSULTA.-

EN DONDE DEBO PROGRAMAR DICHA CONSULTA? LO HE INTENTADO EN EL DOBLE CLIC DEL GRID Y NADA LUEGO EN EL Text1 DE CADA COLUMN DEL GRID Y TAMPOCO.-

ADEMÁS COMO HAGO PARA QUE EL PUNTERO DEL MOUSE SE MUESTRE CUANDO VOY A HACER CLIC EN EL GRID TAL COMO SE MUESTRA CUANDO HAGO CLIC EN UN LISTBOX?

PODRÍAN AYUDARME POR FAVOR?

MUCHAS GRACIAS

SALUDOS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GRID

Publicado por Fidel José (657 intervenciones) el 19/09/2017 00:42:57
Uno de los problemas está en utilizar la consulta como fuente de datos. Te resultará más fácil si generas un cursor con la consulta y asocias el grid al cursor generado.
La consulta SQL asociada directamente como lo haces, hace que el código que pones en cada currentcontrol de cada columna desaparezca en tiempo de ejecución, sencillamente porque parte de eliminar las columnas actuales y crear tantas columnas como campos tenga la consulta.
Si estamos hablando de Visual FoxPro 9, tenemos dos caminos:
1) Crear una clase textbox con lo que necesites y reemplazar por programación los currentcontrol de las columnas que se necesiten.
2) Recurrir a BindEvent() creando un método delegado dentro del cual se puede o no utilizar Aevents() para saber en qué columna se hizo click o dblclick

En ambos casos, es conveniente aplicar la técnica de cursor permanente:
1) Defino el cursor a emplear en el LOAD del formulario (con los campos de la consulta pero sin datos). Llamemoslo "cursorFijo"
2) Creo un método de usuario en el formulario para la configuración del grid.
3) En el Init del form llamo al método de configuración del grid.
4) Efectúo la consulta enviando el resultado a un cursor, llamemosle "cursorConsulta"
5) Incorporo los datos de la consulta al cusor permanente:
SELECT cursorFijo
ZAP
APPEND FROM DBF("cursorConsulta")
Thisform.Grilla.Refresh

Con esta técnica, te aseguras que el control grid no sufrirá cambios en las columnas.

Aplicando Bindevent
Si nunca utilizaste BINDEVENT(), es muy conveniente que leas la ayuda que es muy completa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FOR i = 1 TO thisform.grilla.columnCount
	lcCurrent = thisform.grilla.columns(i).CurrentControl
	BINDEVENT(thisform.grilla.Columns(i).&lcCurrent,"dblClick",thisform,"dlg_grid_dblClick")
NEXT
 
*Delegate Method dlg_grid_dblClick
*-----------------------------------------
* dblClick no tiene parámetros y por lo tanto no deben ponerse
* --------------------------------------------------------------------------
lnEvent = AEVENTS(laEvent,0)
IF lnEvent > 0
	loObj = laEvent[1]			&& referencia al Objeto CurrentControl (Text1, etc)
	loColumn = loObj.parent 	&& referencia al Objeto Column			(Column4, etc)
	lcField = loColumn.Controlsource	&& puede ser cursor.campo o solamente campo
 
       * Si la respuesta es igual en todas las columnas, se puede omitir la determinación de objetos anterior.
        * Sin embargo, es buena costumbre utilizarlo porque pueden condicionar el tipo de respuesta.
 
	* Qué hace cuando recibe dblClick()
	Thisform.Accion_Correspondiente()
 
ENDIF

Sobre BindEvent
Este artículo te puede ayudar.
https://comunidadvfp.blogspot.com/2016/04/enlazar-eventos-en-tiempo-de-ejecucion.html

Acá hay otro en el mismo blog, tal vez más complejo.
https://comunidadvfp.blogspot.com/2016/03/bindevent-raiseevent-y-unbindevents.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GRID

Publicado por Carlos (49 intervenciones) el 19/09/2017 13:58:22
Hola Fidel José. muchísimas gracias por su ayuda lo pondré en práctica para ver si soluciono mi problema.-

Le mando cordiales saludos desde Argentina.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar