[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

Odpovedet emailem