Power Builder - Nuevo Tip - DW Grid con Encabezado Agrupando Múltiples Columnas

   
Vista:

Nuevo Tip - DW Grid con Encabezado Agrupando Múltiples Columnas

Publicado por Jeinner Hidalgo (638 intervenciones) el 12/06/2015 23:25:05
Hola estimados colegas.

Aquí les traigo un pequeño tip, que aunque pueda resultar simple y hasta tonto, me ha tomado unos tres días investigando y haciendo pruebas.

Alguna vez a creado un DW Grid, en el cual desea agrupar varias columnas en un sólo encabezado general? Algo como esto:
Banda de Encabezado
-----------------------REVERSIBLE-------------------------
│Es Reversible│Código Reverso│ Descripción│



Deseo que en el encabezado del DW el título REVERSIBLE, abarque tres columnas y que al cambiar el tamaño de las columnas de forma manual, el fondo del campo texto se ajuste de forma automática. Este es el problema porque PB no maneja algún evento que nos permita controlar el Resize dentro del DW.

MI SOLUCIÓN
1. Cree el campo de texto del encabezado, que llamaremos t_Reversible en la primer columna a la derecha y consérvelo con la propiedad Position.Layer=Band (así debiera quedar por defecto). Anote el ancho de las 3 columnas que dese abarcar y sume el resultado. Al dejar el campo de texto en la primer columna, nos aseguramos que al modificar el ancho de cualquier otra columna PB de forma automática ajustará la posición del texto. Cosa que no sucedería si le utilizamos la propiedad Backgroud o Foreground.

2. En el evento Constructo del DW que deseamos tocar, deberá ajustar el ancho del t_Reversible al total de la sumatoria de los tres campos. Así cuando se abra la ventana, el campo abarcará las tres columnas. Le recomiendo utilizar otro color de fondo para las columnas, de esta manera será más visible su relación.

3. Este paso fue el que me tomó tiempo cómo resolverlo. Hacer que al momento que el usuario cambie el tamaño de alguna de las columnas involucradas (con el ratón), se cambie el tamaño del texto que las agrupa en el encabezado. Para lograrlo deberá crear en el DW un nuevo evento, llamémosle ue_ActualizarAnchoColumnas (no es muy original, pero sí funcional). Ahora bien, he aquí el truco. Deberemos agregar el siguiente código al evento LButtonUp del DW:
PostEvent('ue_ActualizaAnchoColumnas')

Este código se encargará de llamar nuestro nuevo evento, una vez que haya finalizado la ejecución del evento LButtonUp, lo que nos asegura que el nuevo ancho de las columnas ya va a estar actualizado en el DW, al momento en que se ejecutará el código que ajuste el ancho del texto en el encabezado.

Para el evento ue_ActualizarAnchoColumnas, deberemos hacer algo como esto:
Object.t_Reversible.Width=Integer(Object.t_EsReversible.Width)+Integer(Object.t_Codigo.Width)+Integer(Object.t_Descripcion.Width)+2

Si es muy perfeccionara, siempre habrá algún ajuste que deberá hacer al nuevo ancho, debido al tamaño de las líneas de división entre cada columna. Por eso deberá sumarle algunos valores a la sumatoria en el ancho del texto encabezado.

Espero les sirva.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Nuevo Tip - DW Grid con Encabezado Agrupando Múltiples Columnas

Publicado por Antonio (1 intervención) el 13/06/2015 04:55:24
Hola Jeinner:

Gracias por tu TIP....

desafortunadamente no logro hacer ese efecto..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Nuevo Tip - DW Grid con Encabezado Agrupando Múltiples Columnas

Publicado por Jeinner Hidalgo (638 intervenciones) el 15/06/2015 17:20:47
Hola Antonio.

Recuerda que esto funciona si el DW es de tipo Grid.

Qué problema te da y con gusto te ayudo para que te funcione?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar