Columnas dinámicas

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Objetos y características de diseño > Tablas >

Columnas dinámicas

Dentro de una fila de la tabla, si se repite una columna, las repeticiones se pueden representar por medio de columnas dinámicas. La columna está asociada con un elemento de repetición de una fuente de página. Cuando la tabla aparece en pantalla, el número de columnas se corresponderá dinámicamente con el número de instancias del elemento asociado.

 

Las columnas dinámicas pueden aparecer en dos tipos de contextos de fila:

 

Filas estáticas y columnas dinámicas: en este caso la tabla crece a lo largo (compare las tablas que aparecen más abajo). En este caso, la columna inicial hace de encabezado y puede contener el nombre de las filas. Puede añadir una columna inicial cuando cree la tabla por primera vez, pero también puede crear la columna inicial después de crear la tabla porque la columna inicial es una columna estática.

 

<Persona>

<Persona>

<Persona>

<Nombre>

 

 

 

<Apellido>

 

 

 

<Teléfono>

 

 

 

Filas dinámicas y columnas dinámicas: la tabla puede crear a lo alto (con más filas) y a lo largo (con más columnas). Para crear este tipo de tabla es necesario que en la fuente de página el número de instancias de elemento de columna sea igual en todas las filas. Por ejemplo, en la tabla que aparece a continuación, cada uno de los cuatro elementos semana (cada uno corresponde a una fila de la tabla) contiene exactamente tres elementos día (las columnas de la tabla). Si algún elemento semana contiene un número de elementos día que no sea 3, entonces no se podrá dibujar la tabla. También debe tener en cuenta que, por lo general, (i) los elementos de tipo columna se dan dentro de elementos de tipo fila, tanto en la fuente de página como en el diseño; (ii) todos los elementos de tipo fila se llaman igual y todos los elementos de tipo columna se llaman igual. Sin embargo, ninguno de estos dos aspectos es condición necesaria para crear este tipo de tabla dinámica: (i) los elementos de tipo columna se pueden dar fuera de elementos de tipo fila y (ii) las filas y las columnas pueden tener distintos nombres.

 

<día>

<día>

<día>

<semana>

 

 

 

<semana>

 

 

 

<semana>

 

 

 

<semana>

 

 

 

 

Nota:puede generar una secuencia de datos a partir de una expresión XPath/XQuery y utilizarla como fuente de datos. Sin embargo, este tipo de fuente de datos se crea solamente para dicho uso y no estará disponible como fuente de página en ninguna otra posición del documento.

 

Ejemplo: columnas dinámicas para días dentro de filas dinámicas para semanas

En la imagen siguiente puede ver un elemento calendar que contiene cuatro elementos week y cada elemento week contiene siete elementos day. Podemos crear una tabla que contenga filas dinámicas para los elementos week y columnas dinámicas (dentro de cada elemento week) para los elementos day. Observe que en la estructura de datos (i) los elementos day están dentro de los elementos week y (ii) el número de elementos day que están dentro del elemento week es el mismo: 7.

MTDTablesDynamicColsEx01

 

Crear columnas dinámicas dentro de filas dinámicas

Arrastre un control Tabla hasta el diseño y colóquelo en la posición correspondiente. En el cuadro de diálogo "Tabla nueva" (imagen siguiente) seleccione las opciones para filas dinámicas y columnas dinámicas. Seleccione el número de filas y columnas que deben repetirse por cada instancia del elemento que corresponda a la fila y a la columna respectivamente. Las columnas iniciales y finales corresponden a las filas de encabezado y de pie de tabla. Recuerde que puede añadir controles Anexar/Eliminar para las filas dinámicas, pero no para las columnas dinámicas.

Click to expand/collapse

La tabla se creará en el diseño. En la siguiente imagen puede ver el diseño final de una tabla con filas y columnas dinámicas. Observe que:

 

Los campos que representan las filas y columnas dinámicas de la tabla están señalados con iconos azules en forma de fila y de columna respectivamente.
Estos campos deben estar asociados a los nodos de la fuente de página que aportarán los datos para las filas y columnas de la tabla. En la fuente de página el elemento asociado a la columna debe estar dentro del elemento asociado a la fila. En el diseño, el campo de la fila está dentro del campo de la columna.

MTDTablesDynamicColsExDes01

Se usan expresiones XPath para asociar los campos de fila y de columna a los nodos de la fuente de página. La expresión que selecciona el elemento para el campo de fila debe seleccionar todas las instancias del elemento. La expresión XPath que aparece en la imagen anterior selecciona todos los elementos secundarios week del elemento calendar: $XML1/calendar/week. Sin embargo, la expresión XPath para el campo de columna debe seleccionar el elemento de columna que está dentro de la fila actual. Por tanto, una expresión XPath como $XML1/calendar/week/day no funcionaría porque selecciona todos los elementos secundarios day de todos los elementos week. Además, observe que el nodo de contexto XPath para el campo de columna es el elemento que está asociado a la fila. En nuestro ejemplo, el nodo de contexto del campo de columna es week. Por tanto, la expresión XPath day seleccionaría los elementos secundarios day del elemento week actual.
En el diseño hay una sola celda situada en el punto de intersección entre los campos de fila y de columna. El nodo de contexto de esta celda es el elemento que corresponde al campo de fila (es decir, week). Las expresiones XPath de esta celda deben construirse dentro de este contexto. Cuando se cree la tabla, dentro de cada elemento de fila (es decir, week) se creará una celda para cada columna. La expresión XPath se evalúa para cada celda de la columna dentro del contexto de la fila actual. Para alcanzar el contenido del elemento que corresponde al campo de columna puede utilizar la variable especial $MT_TableColumnContext, que, en tiempo de ejecución, contiene el elemento que corresponde a la columna actual (en nuestro ejemplo, el elemento day actual dentro del elemento week actual). Lo mejor es ver un ejemplo. En la imagen anterior, la celda del diseño que está en el punto de intersección entre los campos de fila y de columna contiene un control de tipo etiqueta. Este control tiene un texto que viene dado por la expresión XPath concat(@id$MT_TableColumnContext/@id). La función concat() concatena dos cadenas de texto: el ID de la semana actual (que se obtiene con @id) y el ID del día actual dentro de la semana actual (que se obtiene con $MT_TableColumnContext/@id). Como el nodo de contexto de toda la expresión XPath es el elemento week (asociado a las filas) @id aporta el valor del atributo week/@id actual, mientras que la expresión $MT_TableColumnContext/@id toma el contenido del atributo day/@id actual dentro del elemento week actual.

 

Este sería el resultado del diseño de tabla de la imagen anterior:

MTDTablesDynamicColsExSim01

Cada elemento week de la fuente de página aparece en una fila (en las filas W1 - W4).
Cada elemento day de la semana aparece dentro de la columna correspondiente (en las columnas D1 - D7).
La concatenación de los dos identificadores se ejecuta por separado para las 28 celdas (de la celda W1D1 a la celda W4D7).

 

Para más información sobre cómo distribuir columnas dinámicas consulte el apartado Propiedades de las tablas.

 


© 2019 Altova GmbH