[VFP] Grid se deforma

3,706 views
Skip to first unread message

Hernandez Gabriel

unread,
Nov 23, 2012, 3:14:29 PM11/23/12
to publice...@googlegroups.com
Hola grupo.

Adjunto imagen de como queda una grilla al desplazarme hacia la derecha con las flechas, las columnas toman tamaños distintos a los originales. 

Utilicé autofit() y no funciona, utilicé colocarle tamaños específicos y sigue sin funcionar.

Bueno, debería ser sencillo poder solucionar este tema, pero Yo, no lo he logrado, si alguien tiene alguna opción, bien venida sea.

Saludos

Gabriel

grilla.jpg

Douglas Sánchez

unread,
Nov 23, 2012, 3:18:39 PM11/23/12
to publice...@googlegroups.com
Bueno a mi nunca me pasa ya que la formo la grid y los formatos se los aplico via codigo en el init

thisform.grid1.column1.Width = 34, para cada columna segun el ancho deseado o alto.

saludes....





Gabriel

--
 
 
 



--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Claro: 505 88495476

Hernandez Gabriel

unread,
Nov 23, 2012, 3:37:17 PM11/23/12
to publice...@googlegroups.com
Se me olvido decir que utilizo cursores que se generan al presionar un boton buscar, todo el codigo se encuentra en el click del mismo.

Saludos

Gabriel


--
 
 
 

Fox Learner

unread,
Nov 23, 2012, 3:55:40 PM11/23/12
to publice...@googlegroups.com
Antes de ejecutar la consulta, desenlaza el grid de su origen de datos:

Thisform.migrid.recordsource=''

* Ejecutas la consulta

Luego seleccionas tu cursor, enlazas el origen de datos al grid y refrescas:

Sele micursor
Thisform.migrid.recordsource='micursor'
Thisform.migrid.refresh()

Aun así.. para evitar perder las características(como el orden de las columnas) y códigos del grid revisa estos artículos de PortalFox. Quizás te ayuden un poco:

Esparta Palma



Utilizar un Select seguro para preservar los grids


Andy Kramek traducido por Ana María Bisbé York:


Saludos!

Hernandez Gabriel

unread,
Nov 23, 2012, 3:58:45 PM11/23/12
to publice...@googlegroups.com
Gracias por responder.

Esta todo tal cual lo expresas... solo se cambia el tamaño de la columna si utilizo barras horizontales.... es raro... pero...

Saludos

Gabriel 


--
 
 
 

Fox Learner

unread,
Nov 23, 2012, 4:00:06 PM11/23/12
to publice...@googlegroups.com
Hubo un compañero que dio 2 alternativas para evitar errores en los grids.

Evitar errores en los grids:

Alternativa #1: Poner el resultado de la consulta en un cursor intermedio, porque cuando el cursor que usas como fuente de datos de la grilla es cerrado, está pierde el enlace de todas sus columnas.


select * from mVentas Where codigo=Elcodigo into cursor PVentas01 

thisform.lockscreen=.t. && Para que no se vea un parpadeo en la pantalla.


select pVentas

zap   && Elimino todos los datos que tiene el cursor  fuente de la grilla.

append from dbf('pVentas01')  && Inserto todos los datos resultado de la consulta.

use in pVentas01 && Cerrar el curso, pues cumplio su objetivo. 

thisform.refresh  && Igual puedes refrescar solo la grilla.

thisform.lockscreen=.f.


Alternativa #2: Desenlazar la fuente de dato de la grilla antes de realizar la consulta.

thisform.lockscreen=.t. && Para que no se vea un parpadeo en la pantalla.

thisform.grid1.RecordSource =''  && Desenlazar la fuente de datos de la grilla. 

select * from mVentas Where codigo=Elcodigo into cursor pVentas readWrite 

thisform.grid1.RecordSource ='PVentas' && Enlazar la fuente de datos de la grilla.

thisform.refresh  && Igual puedes refrescar solo la grilla.

thisform.lockscreen=.f.


Los créditos de ese aporte van para el compañero que posteo esto. No recuerdo quien fue.


Saludos!




Fox Learner

unread,
Nov 23, 2012, 4:18:09 PM11/23/12
to publice...@googlegroups.com
Revisa también estos enlaces donde se ha tratado el tema en este foro:

Grids 


Uno de los comentarios que describe una técnica alternativa fue el de Walter R. Ojeda en el tema:

Reconstruir el ancho de columnas del grid despues de un borrado 



La forma correcta es la siguiente:

- El RecordSource de tu grilla es una tabla temporal o vista (por ejemplo: Cursor1)
- Los datos los tienes en otra tabla (por ejemplo: MiTabla)
- Cuando quieres actualizar la grilla:
     a) ZAP de Cursor1
     b) Copias los registros de MiTabla que te interesan en Cursor1
     c) Refrescas la grilla

Así, nunca perderás la configuración de tu grilla porque siempre el RecordSource de la misma es Cursor1 y siempre se trata de la misma tabla temporal, no de dos tablas temporales con el mismo nombre que sería el caso si haces un nuevo SELECT

Saludos.

Walter.

Después según el primer hilo, Walter aclaró lo siguiente:

Los cursores son locales, puedes 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.



Saludos!

Viktor Velazquez

unread,
Nov 23, 2012, 4:30:16 PM11/23/12
to publice...@googlegroups.com
cuando pierdo referencias yo lo ke hago es utilizar un cursor de la tabla actual con 0 registros  antes de  desenlazar el grid 
de ahi hago lo que te comentan anteriormente..
haces tu consulta.. y enlazar de nuevo a tu cursor que creastes..
saludos

 

Date: Fri, 23 Nov 2012 18:58:45 -0200
Subject: Re: [vfp] Re: [VFP] Grid se deforma
From: flo2...@gmail.com
To: publice...@googlegroups.com
--
 
 
 

Hernandez Gabriel

unread,
Nov 23, 2012, 4:50:02 PM11/23/12
to publice...@googlegroups.com
Bueno, tal vez no me explique bien...

No pierdo referencia en ningún momento, sólo, cuando desplazo hacia la derecha, como en la imagen adjunta, las columnas es como que se juntan, al volver hacia la izquierda, se normalizan... la verdad ya me esta molestando este problema, aunque no lo resuelva, el lunes tengo que entregar el sistema sí o sí.

Saludos

y Gracias a todos.

Gabriel


--
 
 
 

Claudio Luna

unread,
Nov 24, 2012, 8:58:23 PM11/24/12
to Comunidad de Visual Foxpro en Español
Gabriel,
Una posibilidad que tenes es configurar el grid en diseño en cuanto a los tamaños de las columnas los caption de los headers y nada más, nada de código.
Luego cuando enlaces el grid hacer el select que coincida con las columnas de tu grid, algo como
select gridcolumn1,gridcolumn2,gridcolumn3 from tutabla into cursor tucursor
tugrid.recordsource ="tucursor"
así no te complicas la vida.
Espero que te sirva
Saludos
Claudio


--
 
 
 

Viktor Velazquez

unread,
Nov 24, 2012, 9:17:32 PM11/24/12
to publice...@googlegroups.com
en el init de tu grid puedes predeterminar el ancho de tus columnas para que no se te deformen.. asi cuando cargues el cursor pasa por el init y toma estos valores.. saludos
 

Date: Sat, 24 Nov 2012 22:58:23 -0300

Subject: Re: [vfp] Re: [VFP] Grid se deforma
--
 
 
 

ZeRoberto

unread,
Nov 25, 2012, 11:25:05 AM11/25/12
to publice...@googlegroups.com
Yo lo que hago es tengo una funcion SAVECOLUMNS y RESTCOLUMNS

En SaveColumns

Procedure SaveColumns
For Each loColumn In This.Objects
loColumn.Tag = loColumn.ControlSource
EndFor
Return

Procedure RestColumns
For Each loColumn In This.Objects
If !Empty(loColumn.Tag)
loColumn.ControlSource = loColumn.Tag
EndIf
EndFor
Return

En el Init del Grid Llamo al SaveColumns, para guardar todas las columnas

Y despues del SELECT hago el RestColumns para restaurar las columnas

Saludos


El 24/11/12, Viktor Velazquez <viv...@hotmail.com> escribió:
>
> en el init de tu grid puedes predeterminar el ancho de tus columnas para que
> no se te deformen.. asi cuando cargues el cursor pasa por el init y toma
> estos valores.. saludos
>
>
>
>
> --
>
>
>
>

integral

unread,
Nov 25, 2012, 12:01:41 PM11/25/12
to publice...@googlegroups.com

Julián May

unread,
Nov 25, 2012, 8:43:18 PM11/25/12
to publice...@googlegroups.com
Hola .  
Crea un método yo lo llamo Llenargrid() en el formulario 

WITH THISFORM.grd1
        .columncount = 2  && Aquí van las columnas que necesites 
.readonly = .T.
.allowheadersizing = .F.
.allowrowsizing = .F.
.recordsource = 'crMICURSOR'
.Forecolor = RGB(0,0,0) 
.GridLineColor = RGB(0,0,0) 
.Highlight = .T.
.HighlightBackColor = RGB(0,64,128)
.HighlightForeColor = RGB(255,255,255) 
.HighlightRowLineWidth = 2 
.HighlightStyle = 2
.Panel = 1
.RecordSourceType = 1
         *** Defines los nombres de tus columnas 
.Column1.Header1.Caption = ""
.column2.header1.caption = "Nombre" 
       
FOR grdNegrit=1 TO 2
ncol="column"+ALLTRIM(STR(grdNegrit))+"."
.&ncol.header1.FontBold=.T.
.&ncol.header1.Alignment=2
ENDFOR
    .Column1.ReadOnly = .F.
    
    .column1.AddObject("chk1","checkbox")
    .column1.CurrentControl="chk1"
    .column1.chk1.caption = ""
    .column1.Sparse = .F.
    .column1.chk1.Visible = .T.
    .column1.chk1.ReadOnly = .F.
    .column1.chk1.Value = 0
    
    .Column1.Width = 20
    .Column2.Width = 566

    
    .Column1.ReadOnly = .F.
    .Column1.AlignMent = 2
ENDWITH 


Luego en un método llamado seleccion donde hacess tu selección en tiempo de ejecución  escribes la consulta 
SELECT campo1, campo2 FROM MiTabla INTO CURSOR crMICURSOR 
**** LLamas al método de Llenargrid
WITH THISFORM 
   .Llenargrid() 
ENDWITH  

y se pinta el grid lo puedes invocar las veces que necesites para que no se pierda cuando usaba la BD nativa de FoxPro lo hacía hago algo parecido aun con Firebird 
Creo el objeto  
invoco un método de la clase que me llame al procedimiento al macenado en la base de datos y luego hablo al método llenargrid() 

Saludos espero haberme explicado si no lo has resuelto me avisas y te mando un ejemplo 

Saludos 

Jose Mario

unread,
Dec 14, 2012, 4:41:36 PM12/14/12
to publice...@googlegroups.com
cuando me sucede hace lo siguiente
dar click derecho sobre el grid y elegis edit
se colocara en modo edicion

luego hace como se hace en excel
y cambiale al tamaño original, con el mouse
cuando se hace cruz, y hacelo al tamaño mayor
te apuesto que volvera a su tamaño original

El viernes, 23 de noviembre de 2012 14:14:31 UTC-6, Easy Gestion escribió:

Hernandez Gabriel

unread,
Dec 14, 2012, 5:54:28 PM12/14/12
to publice...@googlegroups.com
Gracias, pero mis grillas nunca tienen datos, se generan a partir de consultas y les doy formato, todo por código en tiempo de ejecución.

Saludos

Gabriel


--
 
 

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Dec 14, 2012, 6:29:23 PM12/14/12
to publice...@googlegroups.com
Hola en algunas ocasiones esto sucede porque estas manteniendo el mismo tamaño de columna cuando crear la grilla que es 75 si este valor lo cambiar se mantendrá en el tamaño que le pongas. puedes descargar mi grilla y te olvidas de muchas broncas

Lo que si debes considerar siempre es lo siguiente.
1.- cuando enlazas ya sea con una tabla o con un cursor primero tienes que limpiar el 
Thisform.RecordSource = ""
en este caso en mi grilla solo pondrías
Thisform.GridLibre.Configurar("") 
2.- después de esto haces todo lo que tienes que hacer para que sacas el cursor y le pones
Thisform.GridLibre.Configurar("Mi_Cursor") 


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
skype. : rycjesus 
rycjesusrj @ hotmail.com 

Aleks Martinez

unread,
May 30, 2020, 6:12:23 AM5/30/20
to Comunidad de Visual Foxpro en Español
Todavía el día de hoy me sirvió este consejo y me ayudo a Solucionar el tema.

Gracias !!!
Reply all
Reply to author
Forward
0 new messages