Mis Publicaciones!

miércoles, 24 de noviembre de 2010

GRID

El control Grid de Visual FoxPro, por momentos ha sido poco valorado. Pienso que es probablemente uno de los controles más poderosos y útiles con los que he tenido el placer de trabajar. Las cosas que son capaces de hacer son sencillamente increíbles. Puede tener varios controles en una columna o incluso colocar un grid dentro de otro grid, de tal forma tiene filas y columnas que se interceptan en celdas representando muchos registros.

En esa entrada, deseo mostrarle una característica conocida del control grid. Si sabe de esta característica, entonces es uno entre un puñado. Cuando se refrescan los grids o si se repintan va a acceder al fondo (backstyle) de cada control que contiene en las columnas, y cualquier cosa que haga en los controles individuales va a ser mostrado en el grid.

La computación grid es una tecnología innovadora que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento yaplicaciones específicas) que no están sujetos a un control centralizado. En este sentido es una nueva forma de computación distribuida, en la cual los recursos pueden ser heterogéneos (diferentes arquitecturas, supercomputadores, clusters...) y se encuentran conectados mediante redes de área extensa(por ejemplo Internet).

El término grid se refiere a una infraestructura que permite la integración y el uso colectivo de ordenadores de alto rendimiento, redes y bases de datos que son propiedad y están administrados por diferentes instituciones.

Ayuda del FoxTeam de Microsoft

Permítame aclarar... digamos que tenemos un grid con una única columna y que esa columna contiene Textbox1. Si establece el backcolor del Textbox1 a través del código, digamos, el color Rojo, luego cada celda mostrada en la columna1 será roja. Entonces, cómo obtener colores dinámicos (celdas individuales coloreadas de forma diferente dentro de la misma columna)? Bien, el Fox Team de Microsoft nos brinda algunas propiedades dinámicas del objeto columna que va a actuar sobre celdas individuales ((DynamicAlignment, DynamicBackColor, DynamicCurrentControl, DynamicFontBold, DynamicFontItalic, DynamicFontName, DynamicFontOutline, DynamicFontShadow, DynamicFontSize, DynamicFontStrikeThru, DynamicFontUnderline, DynamicForeColor, y DynamicInputMask). Estas son muy utilizadas y en el escenario que brindo DynamicBackColor trabajará muy bien para cambiar el backcolor de una celda individual dentro de una columna del grid. Pero ¿Y si desea hacer algo más complejo? ¿Y si tiene un contenedor en la columna y el contenedor contiene múltiples objetos y desea establecer sus propiedades forecolor y backcolor a colores completamente diferentes dinámicamente o si desea mostrar diferentes imágenes dentro de las celdas del grid?

Soluciones ingeniosas y frecuentes de los desarrolladores

Un enfoque a estos problemas es utilizar múltiples controles dentro de las columnas del grid y luego, utilizar DynamicCurrentControl para decidir cuál mostrar. Algunos controles textbox que tienen fondo rojo y otros que tienen fondo blanco, o diferentes controles image configurados con figuras diferentes.

Otro método ingenioso de algunos desarrolladores Visual FoxPro al solucionar este problema es subclasear el objeto columna y luego enganchar en una propiedad dinámica de la columna que no se utilice para otros propósitos (por ejemplo, DynamicForeColor) Si el ForeColor es igual a 1, entonces hace esto, si es 2 entonces se hace otra cosa y si es 3 ….y etcétera. Aun cuando este enfoque y los dos precedentes son válidos, hay otra vía.

Otra vía

Como se ha visto antes, a la propiedad BackStyle se accede desde el CurrentControl en una columna, y no se accede sólo una vez, se accede por cada celda visible del grid. Entonces, utilizando esto podemos hacer la cercarnos a lo que queremos: un formateo dinámico y mostrar. ¿Desea mostrar imágenes diferentes? sólo hay que crear una subclase del contenedor y colocamos un control image dentro y lo colocamos en una columna. Luego, el método backstyle_access (necesitará añadir este método access al contenedor subclaseado), vea el valor de la propiedad Picture de la imagen en un campo en el RecordSource que guarda todos los caminos diferentes en el método backstyle_access de la imagen.

this.picture = crsImages.Paths