Como bloquear la columna de un grid

538 views
Skip to first unread message

Elides Paredes

unread,
May 8, 2015, 3:44:53 PM5/8/15
to publice...@googlegroups.com
Estimados amigos. 

Antes de consultar en el foro, siempre me tomo por lo menos una semana para ver en éste y otros foros. Reviso los temas anteriores e incluso conseguí un hilo que habla del tema. Pero la respuesta no me funcionó. (le respondieron columna. enable = .T: (y no me refiero a eso), necesito que la columna se quede quieta mientras muestra otras columnas. 

Sin embargo, en éste caso, aparentemente muy sencillo no me funciona. Tengo 2 grid en diferentes formularios, en uno me bloquea la columna izquierda (la 1) y en la otra poniendo lo mismo no lo hace y no tengo idea de porque. 
En tiempo de diseño hice esto
 
LockColumnsLeft  = 1
LockColumns        = 1 

 Y en el Init del grid coloqué ésto (después para probar y tampoco funcionó)

WITH Thisform.pageframe1.page1.grid1 
     .LockColumnsLeft  = 1
     .LockColumns      = 1 



Mi pregunta es: Hay algún otro parámetro que deba cambiar? es que no bloquea la columna1, ya comparé cada una de las propiedades de los 2 grid y están exactamente iguales y en uno bloquea la columna y el otro no. 

Incluso, el que no lo hace es una copia del que lo hace, sólo que le modifiqué algunas columnas pero básicamente es lo mismo.

De antemano gracias.

Elides Paredes
Barquisimeto Venezuela.

Fidel Charny

unread,
May 8, 2015, 4:20:45 PM5/8/15
to publice...@googlegroups.com, elides...@gmail.com
Colocar en tiempo de diseño y en el Init del control grid, es casi lo mismo.
Lo que hay que ver es en qué momento configuras el control grid.
Tengo muy pocos casos de ejemplo, pero primero asigno el cursor y los controlsource de las columnas (en su caso se agregan objetos a las columnas) y luego las dos instrucciones que comentas, exactamente como las pones.

Elides Paredes

unread,
May 9, 2015, 10:40:22 AM5/9/15
to publice...@googlegroups.com, elides...@gmail.com
Gracias por contestar amigo Fidel.
Esto es lo que tengo en el Init del formulario (no en el init del grid, No puedo ponerlo en el init del Grid, porque ese corre antes que el init del formulario y el formulario recibe un parámetro que necesita el Grid. 

Esto funciona perfecto en el otro fomulario. Uno es para órdenes de compras y éste para cotizaciones. Ambos tienen campos muy similares, por eso copié el grid de uno en otro y modifiqué lo necesario.

El problema lo resolví así. Colocando la instrucción de bloqueo al final del with endwith. ¿Porque? no se. 

SELECT detalles 


WITH Thisform.pageframe1.page1.grid1 
*!*     .LockColumnsLeft  = 1 && Aqui no funciona ni en las propiedades -----    OJO. VE ÉSTO
      && Lo coloqué al final de éste procedimiento y funcionó.
.HeaderHeight     = 67
.height           = 326 && 236
.width            = 980
  .left             = 2
     .top              = 0 &&30
     .RowHeight        = 30 
     .ColumnCount      = 23
     .RecordSourceType = 1
     .RecordSource     = "detalles"
     .visible          = .T.
*!* .LockColumnsLeft  = 2

.Column1.Width             = 40 &&120
.Column1.header1.Alignment = 2
.Column1.header1.Caption   = "Ojo"
     
* column2 Número de Cotizacion
* ============================
  .column2.header1.Caption   ="Número Cotizacion"
  .column2.header1.WordWrap  = .T. 
.column2.header1.FontBold  = .T.
  .column2.Width             = 95 
     .column2.ControlSource     = "detalles.Num_Cotiza"
     .column2.Alignment         = 2


* column3 Tipo de Repuesto
* ==========================
  .column3.header1.Caption   ="Tipo de Repuesto"
  .column3.header1.WordWrap  = .T. 
.column3.header1.FontBold  = .T.
  .column3.Width             = 105 && 0
     .column3.ControlSource     = "detalles.tipo_repue"
     .column3.Alignment         = 2

* column4 Código de Taller
* ============================
  .column4.header1.Caption   ="Código de taller"
  .column4.header1.WordWrap  = .T. 
.column4.header1.FontBold = .T.
  .column4.Width             = 106
     .column4.ControlSource     = "detalles.codigo_tal"
     .column4.Alignment         = 2
     
* column5 Cantidad
* ========================
  .column5.header1.Caption   ="Cantidad"
  .column5.header1.WordWrap  = .T. 
.column5.header1.FontBold = .T.
  .column5.Width             = 61
  .column5.InputMask         = "999,999,999"   && De la columna no del texto (sin decimales)
  .column5.ControlSource     = "detalles.cantidad"
     .column5.Alignment         = 2     


* column6 Descripción del Repuesto
* ========================
  .column6.header1.Caption   ="Descripción del Repuesto"
  .column6.header1.WordWrap  = .T. 
.column6.header1.FontBold  = .T.
  .column6.Width             = 380
  .column6.ControlSource     = "detalles.descripcio"
     .column6.Alignment         = 0




ENDWITH 

ThisForm.Pageframe1.Page1.Grid1.LockColumns = 1   ------ CON ESTA MODIFICACION SI LO HACE

AHORA. QUE TIENE QUE VER QUE LO PONGA AL FINAL? ASÍ ME FUNCIONO BIEN, ES DECIR ME BLOQUEA LA COLUMNA 1

Elides Paredes
Barquisimeto Venezuela.

integral

unread,
May 12, 2015, 10:47:54 AM5/12/15
to publice...@googlegroups.com, elides...@gmail.com

Estimado Amigo ELIDES :

Te muestro otra forma de bloquear por ejemplo la primera columna dentro de un Grid...

ThisForm.LockScreen = .T.
nPos = This.ActiveColumn - This.RelativeColumn
IF nPos > 0 
  This.COlumn1.ColumnOrder = nPos + 1 
ELSE 
  This.COlumn1.ColumnOrder = 1 
ENDIF
ThisForm.LockScreen = .F.

A ver como te resulta..

Saludos,

INTEGRAL

Elides Paredes

unread,
May 12, 2015, 11:14:50 AM5/12/15
to publice...@googlegroups.com, elides...@gmail.com
Gracias amigo Integral por tu disposición a ayudar, Realmente valoro mucho eso

El amigo Fidel dice ésto:
Colocar en tiempo de diseño y en el Init del control grid, es casi lo mismo. 
Lo que hay que ver es en qué momento configuras el control grid.

Estoy muy de acuerdo con él. Mi problema es que lo coloqué en las propiedades y en el código de inicio y sencillamente no respetó eso el programa, es algo muy extraño porque la instrucción estaba en un with endwith y no atendía la instrucción. La coloqué fuera del  with endwith, pero dentro del mismo procedimiento y entonces si funcionó bien. 
Porqué? la verdad no tengo la menor idea. Cuando pasan cosas así trato de conseguir la razón, y por eso consulto eso en el foro.
En otro hilo, publiqué mi problema con el set delete on que tampoco hace lo que debería, incluso Fernando, (el sensei), me preguntó si no había consultado la ayuda. Y me sugiere que haga lo que había mostrado como hecho por mi, exactamente lo que el sugiere, en fin. Lo que quiero decir es que me gusta comentar esos tropiezos porque estoy convencido que la computadora no se equivoca, son errores que cometo pero que no ubico.

De todas formas gracias por ser tan cordial y atento.de veras lo aprecio mucho.

Jairo Miranda

unread,
May 12, 2015, 11:25:44 AM5/12/15
to publicesvfoxpro
En el metodo when 

return (.f.)

Elides Paredes

unread,
May 12, 2015, 12:59:14 PM5/12/15
to publice...@googlegroups.com, elides...@gmail.com
Gracias amigo Jairo.
 
 Esto si es nuevo para mi. Nunca he usado ese método. Voy a probar para ver lo que pasa, pero quizás no me explique bien. No es bloquear el acceso a la columna; sino evitar que la columna se mueva, cuando me desplazo con las columnas  horizontalmente

Elides Paredes
Barquisimeto Venezuela.

Jean Pierre Adonis De La Cruz Garcia

unread,
May 12, 2015, 1:08:30 PM5/12/15
to publice...@googlegroups.com, elides...@gmail.com
Amigo de seguro te refieres hacer esto.
Espero que sea eso
grid.png

Jean Pierre Adonis De La Cruz Garcia

unread,
May 12, 2015, 1:31:47 PM5/12/15
to publice...@googlegroups.com, elconsultor...@gmail.com, elides...@gmail.com
Si es asi lo que deseas hacerlo puedes usar lo sgte en la propiedad de la Grid.
LockColumns=1 

donde 1 es la cantidad de columnas que deseas que esten fijas.

Elides Paredes

unread,
May 13, 2015, 10:53:07 AM5/13/15
to publice...@googlegroups.com, elides...@gmail.com
Amigos, gracias. Ya lo resolví, el problema, lo que no entiendo es porque no lo hace desde el principio, con solo poner el valor en el parámetro, en las propiedades en modo de diseño.
Tampoco lo hizo al ponerlo dentro de un with endwith, en el procedimiento init, sin embargo, como ha sido siempre, incluso en otro formulario de donde copié el grid (el cual hace casi lo mismo). 

Pero la solución fue colocarlo fuera del with endwith, es extraño, pero así está funcionando. Siempre me gusta llegar al fondo del asunto y saber o por lo menos tratar de entender lo que pasa. Sin embargo en éste caso excepcional prefiero dejarlo así. Y claro, funciona bien, solo sacando la instrucción del with endwith.

Lo que dice Fidel es muy cierto, Init o propiedades en tiempo de diseño para el programa es prácticamente lo mismo. Estoy de acuerdo. Ahora por que no funciona así? no lo se. Hasta pensé enviar el formulario, pero tiene 6 tablas grandes, varias pestañas, es un poco complicado y conseguí que funcionara haciendo lo mencionado.

De todas formas, estoy muy agradecido como siempre.

Algo que olvide es como cerrar el tema. No veo la opción por ningún lado y creo que debería estar mas visible.


Elides Paredes
Barquisimeto Venezuela.

Daniel Sánchez

unread,
May 13, 2015, 11:01:03 AM5/13/15
to Comunidad de Visual Foxpro en Español
En todo caso podrías usar el programa de Fernando B. foxbin2prg para que obtengas el archivo de texto de tu formulario, para descubrir donde estaba el supuesto problema de no querer reconocer el bloqueo de la columna, seguramente algún código oculto.

Saludos
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047 RPM #948615385
Trujillo - Perú

P  Sugerimos no imprimir este e-mail a menos que sea absolutamente necesario. Protejamos el medio ambiente.

Elides Paredes

unread,
May 13, 2015, 11:31:21 AM5/13/15
to publice...@googlegroups.com, elides...@gmail.com
Amigo Daniel.

Mis saludos!

El comentario es muy valido. Eso sería lo ideal, De ese programa me habló el sensei creador Fernando, Cuando me apareció otro 'cangrejo'  con los zorder por  algunos recuadros en un formulario que cambian la posición que tienen en modo de diseño al regresar del modo de ejecución. (en modo de diseño están debajo de los controles, lo hice para darles un fondo de mejor apariencia. Pero al regresar los recuadros se colocan encima de los controles y no puedo verlos). 

Me explicó algo genial, la forma como el VFP guarda en una tabla la posición de los controles, pero quizás la tabla se corrompe de alguna forma y pierde esos valores o los modifica dejando ese efecto.

Y me parece una solución ideal. El problema es que lo veo muy complicado, Uno de éstos días quizás me aventure a utilizarlo, pero ya el propio concepto que maneja para hacer lo que hace. Es demasiado para mis neuronas, se sobrecalientan.. jajaja..

 gracias. amigo, igualmente lo tendré presente y prometo buscar la manera de hacerlo así.

Elides Paredes
Barquisimeto Venezuela.
Reply all
Reply to author
Forward
0 new messages