2011-10-31 237 views
1

我在空白子报表上看到了很多问题,但没有一个提供我需要的信息。我有一个主报告:Jasper报告中的空白子报告

<?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="sample_report" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="0"/> 
<parameter name="reportTitle" class="java.lang.String"/> 
<parameter name="reportSubTitle" class="java.lang.String"/> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<title> 
    <band height="65" splitType="Stretch"> 
     <textField> 
      <reportElement x="0" y="0" width="555" height="20"/> 
      <textElement textAlignment="Center"/> 
      <textFieldExpression><![CDATA[$P{reportTitle}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="434" y="40" width="80" height="20"/> 
      <textElement textAlignment="Right"/> 
      <textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression> 
     </textField> 
     <textField evaluationTime="Report"> 
      <reportElement x="514" y="40" width="40" height="20"/> 
      <textElement/> 
      <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="0" y="20" width="555" height="20"/> 
      <textElement textAlignment="Center"/> 
      <textFieldExpression><![CDATA[$P{reportSubTitle}]]></textFieldExpression> 
     </textField> 
    </band> 
</title> 
<pageHeader> 
    <band splitType="Stretch"/> 
</pageHeader> 
<columnHeader> 
    <band splitType="Stretch"/> 
</columnHeader> 
<detail> 
    <band height="109" splitType="Stretch"> 
     <subreport isUsingCache="false"> 
      <reportElement x="0" y="0" width="555" height="100" isPrintWhenDetailOverflows="true"/> 
      <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
      <subreportExpression><![CDATA["sample_report_activity_report.jasper"]]></subreportExpression> 
     </subreport> 
    </band> 
</detail> 
<columnFooter> 
    <band splitType="Stretch"/> 
</columnFooter> 
<pageFooter> 
    <band splitType="Stretch"/> 
</pageFooter> 
<summary> 
    <band splitType="Stretch"/> 
</summary> 
</jasperReport> 

与子报表:

<?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="sample_report_activity_report" pageWidth="802" pageHeight="555" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"> 
<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="0"/> 
<queryString language="SQL"> 
    <![CDATA[SELECT ActivityType, Count, Amount, ActivityDate FROM Activity WHERE ARIID = 1]]> 
</queryString> 
<field name="ActivityType" class="java.lang.String"/> 
<field name="Count" class="java.lang.String"/> 
<field name="Amount" class="java.lang.String"/> 
<field name="ActivityDate" class="java.lang.String"/> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<title> 
    <band height="24" splitType="Stretch"> 
     <staticText> 
      <reportElement x="0" y="0" width="802" height="20"/> 
      <textElement textAlignment="Center"/> 
      <text><![CDATA[Activity Report]]></text> 
     </staticText> 
    </band> 
</title> 
<pageHeader> 
    <band splitType="Stretch"/> 
</pageHeader> 
<columnHeader> 
    <band height="25" splitType="Stretch"> 
     <staticText> 
      <reportElement x="12" y="0" width="100" height="20"/> 
      <textElement/> 
      <text><![CDATA[ActivityType]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="112" y="0" width="100" height="20"/> 
      <textElement/> 
      <text><![CDATA[Count]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="215" y="0" width="100" height="20"/> 
      <textElement/> 
      <text><![CDATA[Amount]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="315" y="0" width="100" height="20"/> 
      <textElement/> 
      <text><![CDATA[ActivityDate]]></text> 
     </staticText> 
    </band> 
</columnHeader> 
<detail> 
    <band height="22" splitType="Stretch"> 
     <textField> 
      <reportElement x="12" y="0" width="100" height="20"/> 
      <textElement/> 
      <textFieldExpression><![CDATA[$F{ActivityType}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="115" y="0" width="100" height="20"/> 
      <textElement/> 
      <textFieldExpression><![CDATA[$F{Count}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="215" y="0" width="100" height="20"/> 
      <textElement/> 
      <textFieldExpression><![CDATA[$F{Amount}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="315" y="2" width="100" height="20"/> 
      <textElement/> 
      <textFieldExpression><![CDATA[$F{ActivityDate}]]></textFieldExpression> 
     </textField> 
    </band> 
</detail> 
<columnFooter> 
    <band splitType="Stretch"/> 
</columnFooter> 
<pageFooter> 
    <band splitType="Stretch"/> 
</pageFooter> 
<summary> 
    <band height="42" splitType="Stretch"> 
     <staticText> 
      <reportElement x="0" y="0" width="802" height="20"/> 
      <textElement textAlignment="Center"/> 
      <text><![CDATA[--- End of Activity Report ---]]></text> 
     </staticText> 
    </band> 
</summary> 
</jasperReport> 

而且我有下面的Java代码:

Map parameters = new HashMap(); 
parameters.put("reportTitle", "Report"); 
parameters.put("reportSubTitle", "Activity Date 10/25/2011"); 

JasperReport jasperReportMain = JasperCompileManager.compileReport("c:\\tempfilepath\\sample_report.jrxml"); 

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReportMain, parameters, con); 
JasperExportManager.exportReportToPdfFile(jasperPrint, "c:\\tempfilepath\\SampleReport.pdf"); 

至于我可以告诉我按照所有的以前的建议给出了,当我运行主报告时,我的子报告中仍然没有任何数据显示。我究竟做错了什么?

+0

在下面的注释中,您说子报表本身运行正常。但是您不会说主报告(包括其中的子报告)是否可以在iReport中正常工作。可以?开始工作,然后找出你的Java代码。 – mdahlman

回答

0

我没有注意到您的XML JR代码中存在任何违规行为。 首先,你确定你的数据源(数据库结果集)正在返回任何结果并设置正确吗?

我还建议安装Jasper Reports的IREPORT Designer工具。我认为最新的版本是4.1.2。这将极大地帮助您在设计和错误/异常处理方面。

+0

我确实使用iReport来创建这些jrxml文件。另外,如果我自己打印子报表,它会显示数据,所以我相信数据源会返回正确的结果。 –

+2

您可能需要检查DataSource表达式属性,然后检查子报表的“连接类型”属性。这些应该从主报告的JR模板(在iReport中)操纵。此外,子报表中的数据未显示的主要原因之一是如何在主报表内配置该子报表的数据源。 – Mechkov

4

可能是您的子报表中的查询不返回任何行。您可以尝试在您的子报告中添加No Data频段,将其放入一些Static Text,并将(子)报告属性When No Data设置为No Data Section

0

我可能错了,因为我不知道多少jrxml作为代码,因为我一直使用iReport开发报告。你是否将参数从主报告传递给子报表?如果是,只需通过右键单击子报表来检查是否已通过子报表的参数。