2016-04-20 9 views
0

Ich versuche gerade, einen Bericht zu erstellen, der eine Tabelle verwendet, um eine einfache Sortierung für die Benutzer zu ermöglichen. Ich habe eine Menge Fragen und Dokumentationen untersucht, aber ich kämpfe immer noch mit der korrekten Methode, den Bericht in JasperSoft Studio zu erstellen. Ich habe es funktioniert auf eine Art, aber es ist sehr langsam und ich bin mir sicher, es ist nicht die richtige Methode, um darüber zu gehen. Hier ist mehr oder weniger, wie ich tue es im Moment:Korrekte Weise, eine Jasper Reports-Tabelle mit Parametern zu verwenden?

<subDataset name="Dataset1" uuid="6926ab77-6601-4046-a16e-ff19290b3c00"> 
    <parameter name="param" class="java.lang.Integer"/> 
    <queryString> 
     <![CDATA[select 
       fields 
       from table 
       where column = ($P{param})]]> 
    </queryString> 
    <!-- fields --> 
    <field name="field" class="java.lang.String"/> 
</subDataset> 
<parameter name="param" class="java.lang.Integer"/> 
<queryString> 
    <![CDATA[select 
      fields 
      from table]]> 
</queryString> 
<summary> 
    <band height="66"> 
     <componentElement> 
      <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="Dataset1" uuid="933a99f0-f34a-457e-9b90-f641f54fe213"> 
        <datasetParameter name="param"> 
         <datasetParameterExpression><![CDATA[$P{param}]]></datasetParameterExpression> 
        </datasetParameter> 
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
       </datasetRun> 
       <jr:column width="100" uuid="ad2b846b-732a-4b83-aec0-959f19ce2972"> 
        <jr:columnHeader style="Table_CH" height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="100" height="30" uuid="84616414-4739-471e-b853-7a537e72c959"/> 
          <text><![CDATA[columnHeader]]></text> 
         </staticText> 
        </jr:columnHeader> 
        <jr:detailCell style="Table_TD" height="30"> 
         <textField> 
          <reportElement x="0" y="0" width="100" height="30" uuid="bafa83be-5223-4f44-88dd-249256c22a72"/> 
          <textFieldExpression><![CDATA[$F{field}]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
      </jr:table> 
     </componentElement> 
    </band> 
</summary> 

Ist es wirklich notwendig, um die Abfrage zweimal ausführen? Wenn ich versuche, eine Abfrage zu entfernen und sie zu umgehen, erhält die Tabelle niemals Daten. Dieses Problem scheint so einfach, es muss eine Methode dazu geben.

Antwort

1

Ich sehe kein Problem mit der Art, wie Sie Parameter mit dem SubDataset und der Abfrage verwenden.

Ihr Problem ist in der Tat die Tatsache, dass Sie die SQL-Abfrage zweimal ausführen. Um zu verhindern, dass Sie Ihre Haupt-Datensatz der Abfrage leer haben müssen:

<queryString> 
<![CDATA[]]> 
</queryString> 

und dann von den Eigenschaften des Berichts folgende Einstellungen vor:

Wenn keine Daten-Typ: Alle Abschnitte Kein Detail

Dies wird das Rendern aller Ihrer Bänder erzwingen, mit Ausnahme des Details, da ich annehme, dass Sie keins haben.

+0

Perfekt, genau das, was ich gesucht habe. Ich dachte mir, dass es so eine einfache Lösung geben würde. Ich danke dir sehr! – YamSMit

Verwandte Themen