2017-03-27 3 views
-1

Ich versuche, einen einfachen Jasper-Bericht mit 1 Tabelle zu erstellen, die von Java-Code mit JRResultSetDataSource-Objekt aufgefüllt werden sollte. Ich bin jedoch nicht in der Lage, die Werte an die Table-Komponente zu übergeben.Jasper Berichte, wie Daten von JRResultSetDataSource in Tabelle Komponente

Ich suche nicht nach Parameterliste oder JRBeanCollectionDataSource als eine Lösung.

Mein Bericht jrxml:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Created with Jaspersoft Studio version 6.3.1.final using JasperReports Library version 6.3.1 --> 
<!-- 2017-03-27T17:04:35 --> 
<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="tab1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8a63304f-05d6-485c-82e7-5591159f68fb"> 
    <style name="Table_TH" mode="Opaque" backcolor="#F0F8FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="Table_CH" mode="Opaque" backcolor="#BFE1FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="Table_TD" mode="Opaque" backcolor="#FFFFFF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <subDataset name="Empty Dataset1" uuid="be9c1aa9-031c-4232-a9f2-cdcb0a5bd17d"> 
     <field name="MONTH" class="java.lang.Integer"/> 
     <field name="YEAR" class="java.lang.Integer"/> 
     <field name="COUNT" class="java.lang.Integer"/> 
    </subDataset> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <field name="MONTH" class="java.lang.Integer"/> 
    <field name="YEAR" class="java.lang.Integer"/> 
    <field name="COUNT" class="java.lang.Integer"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="79" splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band height="35" splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band height="61" splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="360" splitType="Stretch"> 
      <componentElement> 
       <reportElement x="0" y="0" width="200" height="200" uuid="684e26d7-94cf-49cc-874d-104e29444537"> 
        <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/> 
        <property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/> 
        <property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/> 
        <property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/> 
        <property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/> 
       </reportElement> 
       <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" whenNoDataType="Blank"> 
        <datasetRun subDataset="Empty Dataset1" uuid="0baea769-1082-4618-9eee-520f59145c07"> 
         <connectionExpression><![CDATA[]]></connectionExpression> 
        </datasetRun> 
        <jr:column width="60" uuid="ba2a25da-f872-4a99-8703-9e6e15fc988a"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="60" height="30" uuid="a4bbf819-044c-47ff-bff0-627859b51444"/> 
           <text><![CDATA[MONTH]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:tableFooter style="Table_TH" height="30" rowSpan="1"/> 
         <jr:columnHeader style="Table_CH" height="30" rowSpan="1"/> 
         <jr:columnFooter style="Table_CH" height="30" rowSpan="1"/> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="60" height="30" uuid="91cd6b4f-f09b-4c08-8fe7-0645468bd1cc"/> 
           <textFieldExpression><![CDATA[$F{MONTH}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="70" uuid="80e850bb-b112-4b53-aa44-f9fca76710b4"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="70" height="30" uuid="86e7d6fb-ee79-4c11-8e3d-99b59832b978"/> 
           <text><![CDATA[YEAR]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:tableFooter style="Table_TH" height="30" rowSpan="1"/> 
         <jr:columnHeader style="Table_CH" height="30" rowSpan="1"/> 
         <jr:columnFooter style="Table_CH" height="30" rowSpan="1"/> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="39a27fc4-79d6-4ff8-aae0-ff67ac43bd09"/> 
           <textFieldExpression><![CDATA[$F{YEAR}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="70" uuid="57949a99-6a7c-4911-b01c-1db16d3963bd"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column3"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="70" height="30" uuid="cddf1b17-b113-4cc5-a95c-395f59d96181"/> 
           <text><![CDATA[COUNT]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:tableFooter style="Table_TH" height="30" rowSpan="1"/> 
         <jr:columnHeader style="Table_CH" height="30" rowSpan="1"/> 
         <jr:columnFooter style="Table_CH" height="30" rowSpan="1"/> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="fefdadb9-d47e-45b5-9aa4-346c53ce0441"/> 
           <textFieldExpression><![CDATA[$F{COUNT}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
       </jr:table> 
      </componentElement> 
     </band> 
     <band height="50"/> 
    </detail> 
    <columnFooter> 
     <band height="45" splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band height="54" splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band height="42" splitType="Stretch"/> 
    </summary> 
</jasperReport> 

Mein Java-Code-Snippet:

resultSet = statement.executeQuery(query); 

if(resultSet != null && reportStream !=null) 
{    
JRResultSetDataSource jrr = new JRResultSetDataSource(resultSet); 
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream,new HashMap(),jrr); 
} 

So weit ich bin in der Lage, die Daten über den Bericht zur Liste, wenn ich die Tabelle Komponente nicht verwenden, sondern nur setzen die Felder auf dem Bericht. Aber ich bin nicht in der Lage, einen Weg zu finden, die Daten innerhalb der Tabelle-Komponente zu schieben, wie es eine separate Datenquelle und eine entsprechende Fields-Komponente hat.

Ist es möglich, Tabellendaten mit einer Datenquelle zu füllen? Kann mir jemand ein Beispiel geben oder auf ein Beispiel zeigen.

Danke,
Vishalendu

+0

vielleicht ist nützlich http: // stackoverflow.com/questions/11018651/cani-i-use-data-from-jtable-for-my-jasper -report –

Antwort

1

Sie brauchen so etwas wie dies zu tun:

In JRXML

<subDataset name="Empty Dataset1" ...> 
... 
</subDataset> 
<parameter name="TableDataSource" class="net.sf.jasperreports.engine.JRDataSource"/> 
... 
<jr:table ...> 
    <datasetRun subDataset="Empty Dataset1" ...> 
     <dataSourceExpression><![CDATA[$P{TableDataSource}]]></dataSourceExpression> 
    </datasetRun> 
... 

In Java

JRResultSetDataSource jrr = new JRResultSetDataSource(resultSet); 
Map params = new HashMap(); 
params.put("TableDataSource", jrr); 
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, params, new JREmptyDataSource()); 
+0

Nach dem Ändern der jrxml (und dem Generieren von aktualisierten .jasper), Hinzufügen der HashMap zu der JasperRunManager.runReportToPdfStream() -Methode, erhalte ich ClassCastException: java.lang.ClassCastException: net.sf.jasperreports.engine.JRResultSetDataSource inkompatibel mit Java .sql.Verbindung. Wenn ich Ihre HashMap entferne, ist die Tabelle leer, aber es gibt keinen Fehler. (Komplette Stapelverfolgung hier: https://pastebin.com/yAsnsNiN) – Vishalendu

+0

Bitte poste deine modifizierte JRXML und die fill exception stracktrace. PS: Eine wilde Vermutung, die ich machen würde, ohne Ihre Änderungen und die Ausnahme Stacktrace zu sehen, ist, dass Sie anstelle von in Ihrem JRXML. – dada67

+0

Danke, du warst genau richtig. Ich hatte den gleichen Fehler gemacht, den Sie oben erklärt haben. Diese Lösung funktioniert. Ich habe noch eine Frage, denkst du, dass es einen Weg gibt, einen Berichtsdesigner zu verwenden, dass diese Lösung eher erreicht werden kann als durch Handcodierung? – Vishalendu

Verwandte Themen