>Una vez que defino un Grid dentro de un formulario, me suceden dos eventos: me olvidé de ubicar una columna intermedia o, necesito insertar otra columna, para ello, me toca eliminar el Grid y definir de nuevo. Esto es tedioso porque ya se hizo la definición de formatos, propiedades y todos los elementos para darle forma al grid. ¿Cómo hacer esto sin tener que volver a repetir el trabajo?
>
>Gracias por su ayuda
Eso es un problema constante. Teóricamente puedes agregar una columna al final, y luego cambiar el orden de las columnas, pero me parece que eso causa más problemas de lo que resuelve.
Creo que el Builder de Visual FoxPro te permite agregar o quitar columnas.
Si tienes propiedades y métodos adicionales (como parte de un framework tuyo, o de terceros), necesitas ajustes adicionales. Para este caso, he adaptado código de un builder para insertar los comandos necesarios en varios métodos de cada columna, que era el requerimiento específico que tenía en este caso.
Tal vez querrás adaptar este código, para insertar una columna o borrar una columna. Esto requeriría copiar las propiedades para todas las demás, por ejemplo, si tu grid tiene 10 columnas y quieres insertar una columna entre la #3 y la #4, tendrás que redimensionar el grid a 11 columnas, y luego copiar propiedades relevantes de la columna #10 a la columna #11, de la #9 a la #10 ... de la #4 a la #5.
La forma cómo funciona el Builder a continuación es que primero seleccionas el grid, después invocas el programa (PRG) que contiene los comandos a continuación (que seguramente querrás adaptar). Tal como está, te va dar errores, ya que busca una tablita que contiene los métodos a ser incluidos.
local laControl[1], j, k , x , o, lnMax
use GridMethods
1
Header_DblClick = MethodCode
2
Header_MouseDown = MethodCode
3
Text_DblClick = MethodCode
4
Text_KeyPress = MethodCode
5
Text_MouseDown = MethodCode
use
lnMax = aselobj(laControl)
for k = 1 to lnMax
o = laControl[k]
wait window "Object : " + alltrim(o.Name) nowait
for x = 1 to o.ColumnCount
with o.Columns(x)
.ResetToDefault("ReadOnly")
.ResetToDefault("Visible")
.Text1.Comment = .ControlSource
with .Header1
.WriteMethod("DblClick", Header_DblClick)
.WriteMethod("MouseDown", Header_MouseDown)
endwith
with .Text1
.WriteMethod("DblClick", Text_DblClick)
.WriteMethod("KeyPress", Text_KeyPress)
.WriteMethod("MouseDown", Text_MouseDown)
.ResetToDefault("BackColor")
.ResetToDefault("ForeColor")
.ResetToDefault("ReadOnly")
.ResetToDefault("Visible")
endwith
endwith
next
next
release all
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)