2012-12-06 4 views
0

J'utilise iReport avec pour afficher les données d'un net.sf.jasperreports.engine.data.JRTableModelDataSource dans un tableau. J'utilise TableModelDataSource, car je dois utiliser Java comme source de données.iReport Cell Spanning dans le composant Table

je maintenant obtenu le code suivant, ce qui fonctionne très bien:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="controltest" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <property name="ireport.zoom" value="1.3310000000000022"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="276"/> 
    <property name="ireport.callouts" value="##Wed Dec 05 08:22:05 CET 2012"/> 
    <subDataset name="plantsResultTable"> 
     <field name="COLUMN_0" class="java.lang.String"/> 
     <field name="COLUMN_1" class="java.lang.String"/> 
     <field name="COLUMN_2" class="java.lang.String"/> 
     <field name="COLUMN_3" class="java.lang.String"/> 
     <field name="COLUMN_4" class="java.lang.String"/> 
     <field name="COLUMN_5" class="java.lang.String"/> 
     <field name="readActualSupply" class="java.lang.String"/> 
     <group name="supplyGroup"> 
      <groupExpression><![CDATA[$F{readActualSupply}]]></groupExpression> 
     </group> 
    </subDataset> 
    <field name="remotelyControlledSupply" class="java.lang.String"/> 
    <field name="thirdPartyAccess" class="java.lang.String"/> 
    <field name="plantsResultTable" class="net.sf.jasperreports.engine.JRDataSource"/> 
    <background> 
     <band/> 
    </background> 
    <pageHeader> 
     <band/> 
    </pageHeader> 
    <detail> 
     <band height="675"> 
      <frame> 
       <reportElement x="0" y="250" width="555" height="239"/> 
       <componentElement> 
        <reportElement key="table 2" x="0" y="17" width="555" height="222"/> 
        <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="plantsResultTable"> 
          <dataSourceExpression><![CDATA[$F{plantsResultTable}]]></dataSourceExpression> 
         </datasetRun> 
         <jr:column width="90"> 
          <jr:columnHeader height="30"> 
           <staticText> 
            <reportElement x="0" y="0" width="90" height="30"/> 
            <textElement/> 
            <text><![CDATA[COLUMN_0]]></text> 
           </staticText> 
          </jr:columnHeader> 
          <jr:detailCell height="20"> 
           <textField pattern=""> 
            <reportElement x="0" y="0" width="90" height="20"> 
             <printWhenExpression><![CDATA[$V{supplyGroup_COUNT} == 1]]></printWhenExpression> 
            </reportElement> 
            <textElement/> 
            <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_0}]]></textFieldExpression> 
           </textField> 
          </jr:detailCell> 
         </jr:column> 
         <jr:column width="90"> 
          <jr:columnHeader height="30"> 
           <staticText> 
            <reportElement x="0" y="0" width="90" height="30"/> 
            <textElement/> 
            <text><![CDATA[COLUMN_1]]></text> 
           </staticText> 
          </jr:columnHeader> 
          <jr:detailCell height="20"> 
           <textField> 
            <reportElement x="0" y="0" width="90" height="20"/> 
            <textElement/> 
            <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_1}]]></textFieldExpression> 
           </textField> 
          </jr:detailCell> 
         </jr:column> 
         <jr:column width="90"> 
          <jr:columnHeader height="30"> 
           <staticText> 
            <reportElement x="0" y="0" width="90" height="30"/> 
            <textElement/> 
            <text><![CDATA[COLUMN_2]]></text> 
           </staticText> 
          </jr:columnHeader> 
          <jr:detailCell height="20"> 
           <textField> 
            <reportElement x="0" y="0" width="90" height="20"/> 
            <textElement/> 
            <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_2}]]></textFieldExpression> 
           </textField> 
          </jr:detailCell> 
         </jr:column> 
         <jr:column width="90"> 
          <jr:columnHeader height="30"> 
           <staticText> 
            <reportElement x="0" y="0" width="90" height="30"/> 
            <textElement/> 
            <text><![CDATA[COLUMN_3]]></text> 
           </staticText> 
          </jr:columnHeader> 
          <jr:detailCell height="20"> 
           <textField> 
            <reportElement x="0" y="0" width="90" height="20"/> 
            <textElement/> 
            <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_3}]]></textFieldExpression> 
           </textField> 
          </jr:detailCell> 
         </jr:column> 
         <jr:column width="90"> 
          <jr:columnHeader height="30"> 
           <staticText> 
            <reportElement x="0" y="0" width="90" height="30"/> 
            <textElement/> 
            <text><![CDATA[COLUMN_4]]></text> 
           </staticText> 
          </jr:columnHeader> 
          <jr:detailCell height="20"> 
           <textField> 
            <reportElement x="0" y="0" width="90" height="20"/> 
            <textElement/> 
            <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_4}]]></textFieldExpression> 
           </textField> 
          </jr:detailCell> 
         </jr:column> 
         <jr:column width="90"> 
          <jr:columnHeader height="30"> 
           <staticText> 
            <reportElement x="0" y="0" width="90" height="30"/> 
            <textElement/> 
            <text><![CDATA[COLUMN_5]]></text> 
           </staticText> 
          </jr:columnHeader> 
          <jr:detailCell height="20"> 
           <textField> 
            <reportElement x="0" y="0" width="90" height="20"/> 
            <textElement/> 
            <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_5}]]></textFieldExpression> 
           </textField> 
          </jr:detailCell> 
         </jr:column> 
        </jr:table> 
       </componentElement> 
      </frame> 
     </band> 
    </detail> 
    <columnFooter> 
     <band/> 
    </columnFooter> 
    <pageFooter> 
     <band/> 
    </pageFooter> 
    <summary> 
     <band/> 
    </summary> 
</jasperReport> 

Ce que je dois savoir est maintenant

  1. est-il un moyen de centrer la valeur COLUMN_0 verticalement (réglage alignement vertical "centre"). Je suppose que ça doit aller par sth comme if $V{supplyGroup_COUNT} == $V{supplyGroup_SIZE}/2. J'ai la table montrée sous "réel", mais je veux dynamiquement ressembler à "cible". vertical align
  2. Existe-t-il un moyen d'imprimer une autre valeur COLUMN_0 si la table a un saut de page. C'est le tableau qui commence à la page 1 et se termine à la page 2 qui se termine là. Puis-je imprimer une valeur COLUMN_0 à la page 1 et à la page 2? J'ai mis un <printWhenExpression><![CDATA[$V{supplyGroup_COUNT} == 1 || $P{hasPageBreak}.equals("1"))]]></printWhenExpression> à textField de ma table, mais le compilateur se plaint de ne pas être en mesure de trouver le paramètre hasPageBreak. Pour l'instant je compte juste les articles dans ma table et mets un autre "texte" visible si $ V {supplyGroup_COUNT} == 20 et s'il y a une nouvelle page.

repeat value after break 3. Y at-il un moyen de forcer une table à briser après un certain nombre d'articles? J'ai un texte qui suit la table. J'aimerais toujours avoir au moins une partie (la fin) de la table avec le texte suivant. Ou dois-je utiliser deux tables distinctes?

breaking table

+0

'y at-il un moyen de centrer le COLUMN_0 value' - que voulez-vous dire? –

+0

@AlexK J'ai modifié mon message. Je voulais dire l'alignement vertical de la valeur COLUMN_0. Dans votre solution pour la question de l'utilisateur1264222, vous avez utilisé l'expression '$ V {supplyGroup_COUNT} == 1' afin que la valeur soit écrite dans la première cellule. Je voudrais l'afficher au centre. – Torsten

+0

En d'autres termes, vous voulez appliquer un style (alignement vertical) au champ dans certains cas (style conditionnel). Ai-je raison? –

Répondre

0

1) Oui, vous pouvez aligner verticalement le contenu des cellules de table

<textElement verticalAlignment="Middle"/> 

J'utilise un style

<style name="table_TD" vAlign="Middle" /> 

Je ne suis pas certain sur les deux autres (contributions bienvenues)

2) isReprintHeaderOnEachPage fonctionne pour le groupe en-têtes mais je ne suis pas sûr pour les tables? (je l'utilise souvent un sous-état coupé en place d'une table.)

3) Split Type sur la bande peut aider, mais si « texte » est un objet séparé, je ne crois pas que vous pouvez l'arrêter d'être devenus orphelins

espoir qui aide