List 如何迭代列表并打印它';在每个groupFooter中逐个添加内容?
我只是想知道,是否有任何方法可以迭代列表并在每个groupFooter中逐个(增量)打印其内容 我在我的报告中创建了一个组,在每个groupFooter部分中,我希望显示通过参数从java类发送的List 如何迭代列表并打印它';在每个groupFooter中逐个添加内容?,list,jasper-reports,List,Jasper Reports,我只是想知道,是否有任何方法可以迭代列表并在每个groupFooter中逐个(增量)打印其内容 我在我的报告中创建了一个组,在每个groupFooter部分中,我希望显示通过参数从java类发送的java.util.List中的内容 目前我只是在我的groupFooter中使用了jr:list和jr:listContents,结果是列表中的所有内容都打印在每个groupFooter中。解决这个问题让我头疼,所以任何帮助都可以缓解我的痛苦。您需要创建一个变量,该变量在您的团队级别递增。 第二步是在
java.util.List
中的内容
目前我只是在我的groupFooter中使用了
jr:list
和jr:listContents
,结果是列表中的所有内容都打印在每个groupFooter中。解决这个问题让我头疼,所以任何帮助都可以缓解我的痛苦。您需要创建一个变量,该变量在您的团队级别递增。
第二步是在一个简单的文本字段中使用该变量,或者在您想要的组件(不是集合组件)中使用该变量,并将其表达式如下所示:list.indexOf(countVariable)您需要创建一个在组级别递增的变量。
第二步是在一个简单的文本字段或您想要的组件(不是集合组件)中使用该变量,并将其表达式如下所示:list.indexOf(countVariable)我认为您不应该尝试迭代列表以获取特定数量的
groupFooter
中的内容,相反,我会根据索引直接获取内容列表
我们需要的是一个简单的指针(在列表中的位置),在您的例子中,每次我们有一个新组时,这个数字似乎都是递增的
组更改时的可变计数为:
<variable name="countMyGroup" class="java.lang.Integer" incrementType="Group" incrementGroup="Group1" calculation="Count">
<variableExpression><![CDATA[""]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
注意:printWheenexpression
将避免IndexOutOfBoundsException
,因此组号高于列表的大小
完整的jrxml示例,它在每个记录上使用一个虚拟组进行更改,尝试使用一个带有两个记录的JRPEMPTYDATASOURCE
<?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="ListOnEachPage" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="33394f25-66fc-431b-ac82-88660e9115e5">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="Empty 4 records"/>
<parameter name="listOfStuff" class="java.util.List" isForPrompting="false">
<defaultValueExpression><![CDATA[Arrays.asList(new String[]{"group 1","group 2","group 3"})]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<variable name="countMyGroup" class="java.lang.Integer" incrementType="Group" incrementGroup="Group1" calculation="Count">
<variableExpression><![CDATA[""]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
<group name="Group1">
<groupExpression><![CDATA[$V{REPORT_COUNT}]]></groupExpression>
<groupFooter>
<band height="34">
<textField>
<reportElement x="120" y="0" width="267" height="17" uuid="b45699d3-5d34-4d88-b7bc-2666cf787ace">
<printWhenExpression><![CDATA[$P{listOfStuff}.size()>=$V{countMyGroup}]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA[$P{listOfStuff}.get($V{countMyGroup}-1)]]></textFieldExpression>
</textField>
<textField>
<reportElement x="445" y="0" width="100" height="17" uuid="e5c46332-b137-4c55-99e4-265c87b8f97d"/>
<textFieldExpression><![CDATA[$V{countMyGroup}]]></textFieldExpression>
</textField>
</band>
</groupFooter>
</group>
<detail>
<band height="63" splitType="Stretch">
<staticText>
<reportElement x="140" y="20" width="264" height="30" uuid="1ec9f950-dd2d-4c18-a81a-b0da937eb1b5"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[Just some text to simulate detail band]]></text>
</staticText>
</band>
</detail>
</jasperReport>
=$V{countMyGroup}]>
输出,查看只要在列表大小范围内,如何从列表中提取值
我不认为您应该尝试迭代列表以获取特定数量的
groupFooter
中的内容,相反,我会根据索引直接获取内容列表
我们需要的是一个简单的指针(在列表中的位置),在您的例子中,每次我们有一个新组时,这个数字似乎都是递增的
组更改时的可变计数为:
<variable name="countMyGroup" class="java.lang.Integer" incrementType="Group" incrementGroup="Group1" calculation="Count">
<variableExpression><![CDATA[""]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
注意:printWheenexpression
将避免IndexOutOfBoundsException
,因此组号高于列表的大小
完整的jrxml示例,它在每个记录上使用一个虚拟组进行更改,尝试使用一个带有两个记录的JRPEMPTYDATASOURCE
<?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="ListOnEachPage" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="33394f25-66fc-431b-ac82-88660e9115e5">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="Empty 4 records"/>
<parameter name="listOfStuff" class="java.util.List" isForPrompting="false">
<defaultValueExpression><![CDATA[Arrays.asList(new String[]{"group 1","group 2","group 3"})]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<variable name="countMyGroup" class="java.lang.Integer" incrementType="Group" incrementGroup="Group1" calculation="Count">
<variableExpression><![CDATA[""]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
<group name="Group1">
<groupExpression><![CDATA[$V{REPORT_COUNT}]]></groupExpression>
<groupFooter>
<band height="34">
<textField>
<reportElement x="120" y="0" width="267" height="17" uuid="b45699d3-5d34-4d88-b7bc-2666cf787ace">
<printWhenExpression><![CDATA[$P{listOfStuff}.size()>=$V{countMyGroup}]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA[$P{listOfStuff}.get($V{countMyGroup}-1)]]></textFieldExpression>
</textField>
<textField>
<reportElement x="445" y="0" width="100" height="17" uuid="e5c46332-b137-4c55-99e4-265c87b8f97d"/>
<textFieldExpression><![CDATA[$V{countMyGroup}]]></textFieldExpression>
</textField>
</band>
</groupFooter>
</group>
<detail>
<band height="63" splitType="Stretch">
<staticText>
<reportElement x="140" y="20" width="264" height="30" uuid="1ec9f950-dd2d-4c18-a81a-b0da937eb1b5"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[Just some text to simulate detail band]]></text>
</staticText>
</band>
</detail>
</jasperReport>
=$V{countMyGroup}]>
输出,查看只要在列表大小范围内,如何从列表中提取值
我不知道为什么,但在我的.jrxml中,它应该是
$p{listofsuff}.get($V{countMyGroup}-2)
而不是-1
。其他就是完美,完美,完美,谢谢:)@Hobas你的初始值表达式在Variable中是什么?这和你的示例一样是的,这很奇怪,因为组计数从1开始,列表从0开始,你需要调试一些代码来理解为什么我不知道为什么,但是在my.jrxml中,它应该是$P{listofsuff}.get($V{countMyGroup}-2)
不是-1
。否则就是完美,完美,完美,谢谢:)@Hobas你的初始值表达式在变量中是什么?和你的示例一样是的,这很奇怪,因为组计数从1开始,列表从0开始,你需要调试一些来理解为什么答案是0,你的回答也很准确:)谢谢你回答了我的问题,你的回答也很准确:)