How to use table component added to JasperReports 3.7.2 with grails jasper plugins?
Asked Answered
D

2

6

I would like to use new table component added to JasperReports 3.7.2 with grails jasper plugins. I find this new component useful to generate tables.

I have define Table dataset 1, and some fields (ex : $F{name}), problem, all my fields values are null. I have also define fields (not attached with table), and I get values.

Here is my table code :

<subDataset name="Table Dataset 1">
    <field name="name" class="java.lang.String"/>
    <field name="signal" class="java.lang.Double"/>
    ...
</subDataset>

<componentElement>
<reportElement key="table" style="table" x="0" y="0" width="802" height="50"/>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="Table Dataset 1">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(1)]]></dataSourceExpression>
</datasetRun>
<jr:column width="90">
<jr:columnHeader style="table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="90" height="30"/>
<textElement/>
<text><![CDATA[Name]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="table_TD" height="20" rowSpan="1">
<textField>
<reportElement x="0" y="0" width="90" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
    ...

I guess, my problem is due to this part (I'm using JREmptyDataSource) :

<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(1)]]></dataSourceExpression>

But how can I get my <MODEL_DATA> with Table component ?
(eg : chain(controller:'jasper',action:'index',model:[data:<MODEL_DATA>],params:params))

Dough answered 27/4, 2010 at 16:18 Comment(0)
D
5

Here is the solution :

Keep :

<subDataset name="Table Dataset 1">
    <field name="name" class="java.lang.String"/>
    <field name="signal" class="java.lang.Double"/>
    ...
</subDataset>

and use :

<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>

Table component will now use your actual dataSource (your MODEL_DATA) !

Dough answered 30/4, 2010 at 15:19 Comment(1)
What if you wish to use the secondary dataset?Umbria
C
1

Above answer works fine for SQL expressions, but if you are using an XML datasource, the xPath query must also be included, just like with the main data set.

<subDataset name="Tickets">
    <field name="barcode" class="java.lang.String">
        <fieldDescription><![CDATA[barcode]]></fieldDescription>
    </field>
</subDataset>
Civvies answered 9/11, 2011 at 9:56 Comment(1)
I just tried using it with XML data source, and following what @fabien-barbier said, I get only one row in the table, and it's the last one. I'm not quite sure I understand your example for including XPath query, could you please be more specific...?Retrogradation

© 2022 - 2024 — McMap. All rights reserved.