大家好我每个人都在使用iReports生成其中一个报告而且卡在一个地方。
情况是这样的:
我在主报表中使用了一个子报表,并且我希望在执行查询后将变量(浮点数)从子报表返回到主报表。而我只是将空值返回主报告我已经浪费了2天谷歌搜索和搜索但问题仍然存在..
bellow是我的JRXMLS的虚拟代码(完全相同)并且快照...
主要报告JRXML
<?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="anuj" language="groovy" pageWidth="595" pageHeight="842" 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="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["/home/anuj/Reports/"]]></defaultValueExpression>
</parameter>
<queryString language="SQL">
<![CDATA[select * from "SensorType"]]>
</queryString>
<field name="SensorTypeId" class="java.lang.Integer"/>
<field name="SensorTypeName" class="java.lang.String"/>
<variable name="A" class="java.lang.Integer" resetType="None" calculation="System"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band splitType="Stretch"/>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band splitType="Stretch"/>
</columnHeader>
<detail>
<band height="23" splitType="Stretch">
<textField>
<reportElement x="71" y="3" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{SensorTypeId}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="202" y="3" width="112" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{SensorTypeName}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="5" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="1" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch">
<subreport>
<reportElement x="183" y="16" width="257" height="26"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<returnValue subreportVariable="A" toVariable="A"/>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "anuj_subreport1.jasper"]]></subreportExpression>
</subreport>
<textField>
<reportElement x="71" y="22" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$V{A}]]></textFieldExpression>
</textField>
</band>
</summary>
</jasperReport>
子报告JRXML
<?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="anuj_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" 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="149"/>
<queryString>
<![CDATA[select Sum("SensorTypeId") from "SensorType";]]>
</queryString>
<field name="sum" class="java.lang.Long"/>
<variable name="A" class="java.lang.Integer" resetType="None" calculation="System">
<variableExpression><![CDATA[$F{sum}]]></variableExpression>
</variable>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch">
<staticText>
<reportElement x="169" y="59" width="100" height="20"/>
<textElement/>
<text><![CDATA[sum]]></text>
</staticText>
<textField>
<reportElement x="216" y="59" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{sum}]]></textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="125" splitType="Stretch"/>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
提前致谢..
答案 0 :(得分:7)
虽然这个问题已经得到解答,但我想强调在主要报告(调用SubReport的报告)中对变量进行calculation="System"
的重要性。
在弄清楚之前我浪费了很多时间......
在上面的主要报告JRXML的虚拟代码中,变量“A”正确地具有calculation="System"
。注意:@GenericJon的答案涵盖了 SubReport 中的变量。
答案 1 :(得分:6)
在子报表变量中,您有calculation=System
。当您使用scriptlet自己计算变量时,应该使用此方法。您没有在报告中附加适当的scriptlet,因此永远不会计算变量。
您可能希望更改变量定义,以便在子报表的开头计算它,如下所示:
<variable name="A" class="java.lang.Integer" resetType="Report" calculation="Nothing">
<variableExpression><![CDATA[$F{sum}]]></variableExpression>
</variable>
在报告运行时, resetType="Report"
永远不会重置变量。
calculation="Nothing"
将为数据集中的每一行评估variableExpression。
但是这些属性可以省略,因为它们是使用的默认值。然后,您应该发现变量已正确初始化。
答案 2 :(得分:4)
来自JasperReports Ultimate Guide:
仅当打印包含子报表的整个波段时,才会显示来自子报表的值。如果需要使用与子报表位于同一波段的文本字段打印此值,请将文本字段的评估时间设置为波段
答案 3 :(得分:1)
我同意@ bubba_hego99,计算类型如下:
系统没有计算,只需设置为系统,或者作为其他运算符进行估算。
没有任何计算,只需设置变量。
总和执行总和($ Feild(“A”))。
...
你想知道其他计算的细节,你应该看到ireport文件。
答案 4 :(得分:1)
注意,在早期版本的JasperReports中:
使用子报表
returnValue
时,返回的变量不得与子报表本身位于同一波段。
我认为在乐队的渲染结束时完成了做法。
所以添加另一个乐队并在里面使用你的变量。