Grids

451 views
Skip to first unread message

cbyto

unread,
Feb 8, 2012, 10:18:55 PM2/8/12
to Comunidad de Visual Foxpro en Español
buenas noches a todos.
Por cuestiones de trabajo empece a usar vfp y tengo algunas dudas/
tropiesos.
Queria ver si son tan amables de tirarme una mano.
Esta primera vez los voy a molestar con los Grids.

Hice un .prg donde le pido al usuario unos datos (fecha desde hasta),
se genera la consulta y el resultado lo muestro en un brow y tambien
lo dejo en un archivo xls.

Ahora yo necesitaria en lugar de mostrar el resultado en un brow poder
hacerlo en un grid. Como tengo que hacer?
Si me pueden explicar o dar un ejemplo sencillo se los agradeceria

Muchas gracias
Sebastian

TheNewInquirer

unread,
Feb 9, 2012, 12:41:04 AM2/9/12
to Comunidad de Visual Foxpro en Español
Lo que más da lata en un grid es como evitar que se pierda el código
que pones dentro de los objetos text1, column1, etc., el ancho de las
columnas que se desordena después de un borrado de datos (por apertura
y cierre del origen de datos) y el envío de un cursor (o datos en una
tabla temporal creada con una consulta select) hacia el grid.

En estos enlaces encontrarás información valiosa.

Conservar el codigo de los objetos de un grid, el ancho de columnas y
evitar que se pongan en blanco:

https://groups.google.com/group/publicesvfoxpro/browse_thread/thread/a9090a961da33ec5/60a8e1c8d91603c6?hl=es&lnk=gst&q=ancho+de+columnas+grid#60a8e1c8d91603c6

Enviar el resultado de una consulta Select a un cursor temporal:

https://groups.google.com/group/publicesvfoxpro/browse_thread/thread/6955bfcd15f7715/70b539d2983bde66?hl=es&lnk=gst&q=cursores#70b539d2983bde66

Como prueba de inicio haz esto:

En el evento Load del form:
Close databases
Set exclusive off
Select 3
use mitabla

No debes usar un nuevo use, porque cerrará el origen y de datos(la
tabla original) desde donde el grid toma los datos según la propiedad
Recordsource del grid.

Inserta un grid en el form y click derecho "Generador" (o builder en
VFP9), agrega una tabla libre y elige los campos que apareceran en el
grid.

Luego ejecuta el form y tan tan! Ahi estarán tus datos en el grid.

Luego podrás experimentar a asignar el resultado de una consulta
select a un cursor y asignarlo al grid, según los enlaces.

Recuerda configurar el evento Unload del form asi:
Close databases
Close all

Para que tus tablas no queden abiertas al abandonar el form.

Cualquier duda, si puedo ayudarte, aqui vamos a estar..

Pero en realidad yo también estoy aprendiendo. Los expertos son ellos
jaja!

Saludos!









Irlandes 1960

unread,
Feb 9, 2012, 7:12:17 AM2/9/12
to publice...@googlegroups.com
Estimado Sebastian., antes que nada, bienvenido al mundo VFP.
los prg siguen existiendo, pero las interfaces gráficas lo usual es  trabajarlas sobre un form.
Entiendo por tu pregunta que la mecánica para generar la consulta la tenes clara, y tu problema es como migrar la presentación del habitual browse al objeto grid.
COmo bien te indica el colega, el mayor fastidio con las grillas es que tienen tendencia a perderse cuando volves a generar un cursor que le asignaste como origen de datos.
Para ello debes "desconectar" la grilla de los datos, antes de regenerar la consulta.
Tipicamente el código del evento click del botón que dispara la consulta quedaria algo así como 

thisform.pgfgral1.page2.grdgral1.recordsource = ' '
sele fecha, cliente, saldo, .... from mitabla into cursor micursor where ..... order by cliente, fecha
with thisform.pgfgral1.page2.grdgral1
   .recordsource = 'micursor'
   .column1.controlsource = 'cliente'
   .column2.controlsource = 'fecha'
   .column3.controlsource = 'TRANS(SALDO,"@Z 999,999.99")'
   .column3.dynamicforecolor = 'iif(saldo < 0,255,0)'
   .setall('DYNAMICBACKCOLOR','IIF(ANULADO = .T., RGB(192,192,192),RGB(255,255,255)),','COLUMN')
   .refresh()
endwith 
thisform.pgfgral1.activepage = 2

Las primer linea del ejemplo "desconecta" la grilla del origen de datos
y al final dentro del with ... endwith  se le asigna nuevamente dicho origen de datos, y lo específico a cada columna. Dentro de esta estructura podes usar los dynamic para asignar atributos a las columnas 
Ademas es muy practico trabajar las consultas sobre un pageframe con las solapas ocultas (.tabs = .f.) donde en la primer solapa pones los campos para armar los filtros, y en la segunda mostras el resultado en la grilla.

TheNewInquirer

unread,
Feb 9, 2012, 10:45:35 AM2/9/12
to Comunidad de Visual Foxpro en Español
Aparte tienes la técnica del "Select Seguro" que implica generar un
cursor intermedio para evitar "cerrar" el origen de datos del cursor
real..
http://www.portalfox.com/index.php?name=News&file=article&sid=2331
http://www.portalfox.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=69
Lo intenté, pero no más no me salió lo de hacer ZAP a un CURSOR ya que
pide hacerlo en modo exclusivo, lo que no serviría si se trabaja en
red.

Walter me explicó algo como la técnica del 1, 2, 3 jeje:

1. Zap del cursor.
2. Copiar los datos de la tabla (o consulta select) al cursor.
3. Refrescar el grid.

Pero aun sigo preguntándome como hacer un ZAP a un cursor..


Walter R. Ojeda Valiente

unread,
Feb 9, 2012, 10:49:41 AM2/9/12
to publice...@googlegroups.com
Los cursores son locales, puesdes trabajar perfectamente en red, cada computadora tendrá sus propios cursores que serán totalmente independientes de los demás. Si haces ZAP a uno de ellos, nadie más se entera.

Saludos.

Walter.



> Date: Thu, 9 Feb 2012 07:45:35 -0800
> Subject: [vfp] Re: Grids
> From: thenewin...@gmail.com
> To: publice...@googlegroups.com

DIEGO A. CALLEGARI

unread,
Feb 9, 2012, 11:11:02 AM2/9/12
to publice...@googlegroups.com
Prueba con este ejemplo funcional


Select * from mi_tabla into cursor crs_resultado_TEMP
SELECT crs_resultado
ZAP IN crs_resultado
APPEND FROM dbf("crs_resultado_TEMP")
SELECT crs_resultado
GO BOTTOM


Diego A. Callegari
-----Mensaje original-----
De: publice...@googlegroups.com
[mailto:publice...@googlegroups.com] En nombre de TheNewInquirer
Enviado el: Jueves, 09 de Febrero de 2012 12:46 p.m.
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Re: Grids

Message has been deleted

Wladymir Fernandez

unread,
Oct 5, 2013, 6:24:36 PM10/5/13
to publice...@googlegroups.com
Excelente respuesta amigo, llevo 6 horas sobre este comportamiento raro, muchisimas gracias jkiernan ..! es sin duda la respuesta mas sencilla al problema.. y aprendi de paso el column3.controlsource = 'TRANS(SALDO,"@Z 999,999.99")' que se puede hacer en el grid tambien, mas una vez agradecido..

Luis Maria Guayan

unread,
Oct 5, 2013, 7:23:32 PM10/5/13
to publice...@googlegroups.com
... llevo 6 horas ... en respuesta de un mensaje de hace 22 meses !!!

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Rodolfo Arias

unread,
Oct 6, 2013, 10:08:39 AM10/6/13
to publice...@googlegroups.com

Luis acaso no conoces los raptos por omnis? Chan, chan, chan. Esto fue que el compañero lo acaban de regresar y no esta consciente de que pasaron meses.   Hoy no es Viernes ? :S

Reply all
Reply to author
Forward
0 new messages