Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
You can build tables growing horizontally rather than vertically by using table-column data bands.
A table-column data band represents a data band, which body occupies a rectangular area of cells of a single document table. The body of such a band starts at the beginning of the top-left cell of a corresponding area and ends at the end of its bottom-right cell. Typically, this area consists of one or several table columns as follows.
... | <<foreach ... -horz>> ... | ... | ... | ... |
... | ... | ... | ... | ... |
... | ... | ... | ... <</foreach>> | ... |
Note – The horz switch instructs the engine to affect table columns rather than rows.
However, unlike table-row data bands able to capture only whole rows, table-column data bands can occupy columns even partially as shown in the following template snippet.
... | ... | ... | ... | ... |
... | <<foreach ... -horz>> ... | ... | ... | ... |
... | ... | ... | ... | ... |
... | ... | ... | ... <</foreach>> | ... |
... | ... | ... | ... | ... |
Let us consider typical use cases for table-column data bands at first defining ds
, a DataSet
instance containing DataTable
and DataRelation
objects according to the following data model.
The most common scenario for a table-column data band is building of a document table that represents a list of items side by side. You can use a template like the following one to achieve this.
Good | <<foreach [s in ds.Sales] -horz>><<[s.Goods.Name]>> | Total: |
Pack | <<[s.Packs.Name]>> | |
Sold Quantity | <<[s.Quantity]>><</foreach>> | <<[ds.Sales.sum(s => s.Quantity)]>> |
In this case, the engine produces a report as follows.
Good | Drinking Water | Drinking Water | Mineral Water | Mineral Water | Total: |
---|---|---|---|---|---|
Pack | 1.5 L | 500 ml | 1.5 L | 500 ml | |
Sold Quantity | 12 | 27 | 5 | 13 | 57 |
To grow a document table horizontally by filling it with master-detail data, you can use nested table-column data bands like in the following template.
Good | <<foreach [g in ds.Goods] -horz>><<[g.Name]>> | <<foreach [s in g.Sales]>><<[s.Packs.Name]>> | Total: |
Sold Packs | <<[g.Sales.sum(s => s.Quantity)]>> | <<[s.Quantity]>><</foreach>><</foreach>> | <<[ds.Sales.sum(s => s.Quantity)]>> |
In this case, the engine produces a report as follows.
Good / Pack | Drinking Water | 1.5 L | 500 ml | Mineral Water | 1.5 L | 500 ml | Total: |
---|---|---|---|---|---|---|---|
Sold Quantity | 39 | 12 | 27 | 18 | 5 | 13 | 57 |
You can normally use common data bands nested to table-column data bands as well like in the following template.
Good | <<foreach [g in ds.Goods] -horz>><<[g.Name]>> |
Sold Packs | <<foreach [s in g.Sales]>><<[s.Packs.Name]>> <</foreach>><</foreach>> |
In this case, the engine produces a report as follows.
Good | Drinking Water | Mineral Water |
---|---|---|
Sold Packs | 1.5 L 500 ml | 1.5 L 500 ml |
Note – Table-column data bands can themselves be nested to table-row data bands (see “Working with Cross (Pivot) Tables” for details), but not conversely: Nesting of table-row data bands into table-column data bands is forbidden.
For more examples of templates for typical scenarios involving table-column data bands, see “Appendix C. Typical Templates”.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.