[EMAIL PROTECTED] napsal(a):
> Hi Marian,
>
> já v těhle případech používám subreporty a "masterreport" definuju
> zhruba takto:
>
> <field name="tablemodel" class="javax.swing.table.TableModel"></field>
> <field name="subreport"
> class="net.sf.jasperreports.engine.JasperReport"></field>
>
>
> <detail>
> <band height="10" isSplitAllowed="true">
> <subreport isUsingCache="false">
> <reportElement positionType="FixRelativeToTop" mode="Transparent"
> x="0" y="0" width="505" height="9"/>
> <dataSourceExpression><![CDATA[new
> net.sf.jasperreports.engine.data.
> JRTableModelDataSource($F{tablemodel})]]></dataSourceExpression>
> <subreportExpression
> class="net.sf.jasperreports.engine.JasperReport"><!
> [CDATA[$F{subreport}]]></subreportExpression>
> </subreport>
> </band>
> </detail>
>
> Tato varianta predpoklada "tablemodel" jako datasource pro "subreport".
>
> Petr Michálek
Az teraz som sa k tomu dostal :(
Takze ak potrebujem vytvorit 3 rozdielne tabulky, tak to spravim
priblizne takto?:
<field name="dsA" class="sk.gamo.mojprojekt.tabA"></field>
<field name="srA" class="net.sf.jasperreports.engine.JasperReport"></field>
<field name="dsB" class="sk.gamo.mojprojekt.tabB"></field>
<field name="srB" class="net.sf.jasperreports.engine.JasperReport"></field>
<field name="dsC" class="sk.gamo.mojprojekt.tabC"></field>
<field name="srC" class="net.sf.jasperreports.engine.JasperReport"></field>
<detail>
<band>
<subreport isUsingCache="false">
<dataSourceExpression><![CDATA[new
net.sf.jasperreports.engine.data.JRTableModelDataSource($F{dsA})]]></dataSourceExpression>
<subreportExpression
class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$F{srA}]]></subreportExpression>
</subreport>
</band>
<band>
<subreport isUsingCache="false">
<dataSourceExpression><![CDATA[new
net.sf.jasperreports.engine.data.JRTableModelDataSource($F{dsB})]]></dataSourceExpression>
<subreportExpression
class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$F{srB}]]></subreportExpression>
</subreport>
</band>
<band>
<subreport isUsingCache="false">
<dataSourceExpression><![CDATA[new
net.sf.jasperreports.engine.data.JRTableModelDataSource($F{dsC})]]></dataSourceExpression>
<subreportExpression
class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$F{srC}]]></subreportExpression>
</subreport>
</band>
</detail>
Ako to potom pouzijem v Jave?
Ako priradim srA az srC ake jrxml sa ich tykaju?
Pokud by výše uvedený report byl validní, předal bych potrebne udaje
jako parametr reportu HashMap<String, Object>.
Chyba Tebou navrhovaneho prikladu spociva v tom, že <detail> se volá při
každé iteraci DataSource a může mít pouze jeden <band>
Marian Stevlik (Michal)
IS programmer / developer
GAMO a.s.
Kyjevske nam. 6
974 04 Banska Bystrica
web: www.gamo.sk
mail: [EMAIL PROTECTED]
gsm: +421 905 462010
icq: 38493645
skype: majklbb
NE! Myslim, ze vyse uvedeny priklad neni validni.
- Navrhoval jsem iteraci pres tablemodel (např. "MASTER". Table model je
datasourde reportu).
- Kazdy row tablemodelu obsahuje subreport
(class="net.sf.jasperreports.engine.JasperReport") a tablemodel
(class="javax.swing.table.TableModel")
Jasperreport vygeneruje 1..n radku (detail) a v kazdem radku zobrazi
subreport a data, ktere jsou predany v radku "tablemodel"u.
Java kod bude vypadat zhruba takto:
JasperReport subreport_detail = ...;
JasperReport subreport_summary = ...;
Vector<String> tableColumns = new Vector<String>();
tableColumns.add("tablemodel");
tableColumns.add("subreport");
Vector<Vector<Object>> summaryData = new Vector<Vector<Object>>();
DefaultTableModel tableModel = new DefaultTableModel(tableColumns, 0);
Vector<Object> row;
row = new Vector<Object>();
row.add(createTableModel_Details(...));
row.add(subreport_detail);
tableModel.addRow(row);
row = new Vector<Object>();
row.add(createTableModel_Summary(...));
row.add(subreport_summary);
tableModel.addRow(row);
JRTableModelDataSource dataSource = new JRTableModelDataSource(tableModel);
JasperPrint p = JasperFillManager.fillReport(is, params, dataSource);
Petr Michálek