Jasper reports 如何在表组件中获取列的每页总和并返回到主报表以显示值?
最近我开始与jasper report合作,遇到了一些问题。我有一个带有记录的表,还有一个带有文本字段的标签,我应该在其中放置每页列的总和。(我为调试添加了表尾)。这是一张照片: 我是这样做的:在表中,我添加了具有以下属性的变量“amount”: 注意:重置类型为页面,因为我应该显示每页的总和 在主报告中,我根据添加了变量“sumPerList”,并尝试使用评估时间,但没有任何帮助(无论我设置了什么评估时间,该值总是错误的),我无法在字段“total sum main”中显示与字段“total sum”(表范围)相同的值。 我之所以决定将总和与表分开显示,是因为它们之间有空格,但无法在表中添加空行。 我还尝试在此处设置summ函数: 但这也没用。可能还有别的办法吗?Jasper reports 如何在表组件中获取列的每页总和并返回到主报表以显示值?,jasper-reports,jaspersoft-studio,Jasper Reports,Jaspersoft Studio,最近我开始与jasper report合作,遇到了一些问题。我有一个带有记录的表,还有一个带有文本字段的标签,我应该在其中放置每页列的总和。(我为调试添加了表尾)。这是一张照片: 我是这样做的:在表中,我添加了具有以下属性的变量“amount”: 注意:重置类型为页面,因为我应该显示每页的总和 在主报告中,我根据添加了变量“sumPerList”,并尝试使用评估时间,但没有任何帮助(无论我设置了什么评估时间,该值总是错误的),我无法在字段“total sum main”中显示与字段“tota
(我使用TIBCO Jaspersoft®Studio 6.8.0-VisualDesigner for JasperReports 6.8.0。)数据集返回值没有帮助,因为该值仅在表格完成时返回,而不是在每个分页符上返回 一种(黑客)方法是将一个值持有者对象传递给表子数据集,并在表中编写一个表达式,将对象中的值设置为副作用 例如,您可以使用
AtomicInteger
作为值持有者,请注意,我们不需要原子性,只将其用作可变整数
解决方案如下所示:
- 报表中有一个变量
已初始化为TableTotal
AtomicInteger
作为名为TableTotal
PageTotalHolder
- 表子数据集有一个名为
的变量(我们希望在页脚中显示其值)PageTotal
- 在表列页脚中,我们使用一个print-when表达式,该表达式将当前
值设置为PageTotal
(并始终返回true):PageTotalHolder
$P{PageTotalHolder}.getAndSet($V{PageTotal})>=Integer.MIN_值
- 报告页面页脚显示
$V{TableTotal}.get()
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.8.0.final using JasperReports Library version 6.8.0-2ed8dfabb690ff337a5797129f2cd92902b0c87b -->
<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="Blank_A4_10" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f750af4c-d61b-4bdb-b537-6d71b6754832">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="Dataset1" uuid="8668793a-f800-4489-9589-c9b6d2ee97a0">
<parameter name="PageTotalHolder" class="java.util.concurrent.atomic.AtomicInteger"/>
<variable name="Value" class="java.lang.Integer">
<variableExpression><![CDATA[(int) (10 + 10 * Math.sin($V{REPORT_COUNT}))]]></variableExpression>
</variable>
<variable name="PageTotal" class="java.lang.Integer" resetType="Page" calculation="Sum">
<variableExpression><![CDATA[$V{Value}]]></variableExpression>
</variable>
</subDataset>
<variable name="TableTotal" class="java.util.concurrent.atomic.AtomicInteger" calculation="System">
<initialValueExpression><![CDATA[new java.util.concurrent.atomic.AtomicInteger()]]></initialValueExpression>
</variable>
<detail>
<band height="203" splitType="Stretch">
<componentElement>
<reportElement x="0" y="0" width="200" height="200" uuid="657ddbb8-e98b-43de-be5e-10645069dc44"/>
<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="2eb1dde6-8cf9-45c1-94ce-0bdcb26e120a">
<datasetParameter name="PageTotalHolder">
<datasetParameterExpression><![CDATA[$V{TableTotal}]]></datasetParameterExpression>
</datasetParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(200)]]></dataSourceExpression>
</datasetRun>
<jr:column width="120" uuid="51f2b0c5-0655-4cc3-8d57-75149a7514f6">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
<jr:columnHeader style="Table_CH" height="30"/>
<jr:columnFooter style="Table_CH" height="30">
<textField>
<reportElement x="0" y="0" width="120" height="30" uuid="95a0ff6d-cab6-44df-9aa0-3e41774194e2">
<printWhenExpression><![CDATA[$P{PageTotalHolder}.getAndSet($V{PageTotal}) >= Integer.MIN_VALUE]]></printWhenExpression>
</reportElement>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{PageTotal}]]></textFieldExpression>
</textField>
</jr:columnFooter>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="120" height="30" uuid="c3ee39f0-59fd-47a3-8cba-90f009dc42ca"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{Value}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</band>
</detail>
<pageFooter>
<band height="54" splitType="Stretch">
<textField>
<reportElement x="200" y="0" width="100" height="30" uuid="eb1905ee-50d5-4601-b8ed-62864e6caea5"/>
<textFieldExpression><![CDATA[$V{TableTotal}.get()]]></textFieldExpression>
</textField>
</band>
</pageFooter>
</jasperReport>
=整数。最小值]]>
谢谢您的建议。我也做了类似的事情。我写不出完整的答案,但我在这里描述了它。我创建了一个表格,并将三个文本字段放在同一行的两个单元格中,然后删除表格的边框,并将边框添加到文本字段中,除了位于另一行上方的第一个文本字段之外。在第二个字段中,我计算了每个列表的值,第三个字段传递了主报告中的值,如图所示,在将我的问题标记为重复问题之前,请先阅读,因为评估时间没有帮助,现在我无法编写我昨天所做的完整解决方案。现在可以添加解决方案