如何将 , 分隔的字符串转换为 table 布局?
How to convert a , separated String to a table layout?
我有一个字段值:
CM45024,CM45025,CM45026
我想使用子报表将其分成多个项目。我的 jrxml 来源是:
<field name="docIdNoGRN" class="java.lang.String">
<fieldDescription><![CDATA[docIdNoGRN]]></fieldDescription>
</field>
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement key="textField-53" x="311" y="1" width="88" height="15" uuid="2e040fd0-8fae-46e8-a845-fba421922992"/>
<textElement textAlignment="Center">
<font size="10"/>
</textElement>
<textFieldExpression><![CDATA[($F{docIdNoGRN} != null && $F{docIdNoGRN}.toString().length() > 0) ? $F{docIdNoGRN} : " "]]>
</textFieldExpression>
</textField>
该字段可以包含 3 个或更多项,具体取决于数据。而不是在报告中包含一项:
Item No. Item ID.
1 CM45024,CM45025,CM45026
我想这样显示:
Item No. Item ID.
1 CM45024
2 CM45025
3 CM45026
我正在使用 TIBCO Jaspersoft® Studio Professional - JasperReport 6.1.1 的可视化设计器。
这是使用子报表实现的方法,假设您的 $F{docIdNoGRN}
包含字符串 "CM45024,CM45025,CM45026"
生成将传递给子报表的数据源
<subreport>
<reportElement x="163" y="15" width="200" height="100" uuid="9d6660e0-094e-4df3-9acb-74c031350b10"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList($F{docIdNoGRN}.split(",")))]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "your_subreport.jasper"]]></subreportExpression>
</subreport>
如您所见,我 split(",")
您的字段 String
得到一个 Array
转换为 List
然后传入一个 JRBeanCollectionDataSource
- 设置子报表,引用我们的字符串的技巧是使用 _THIS 作为字段值
示例:(your_subreport.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="jTest_subreport2" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="23d7765f-250f-4632-94c6-bbd218db3d11">
<field name="_THIS" class="java.lang.String"/>
<detail>
<band height="35" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="716bb440-2692-4c58-a1b7-972aff240c67"/>
<textFieldExpression><![CDATA[$V{REPORT_COUNT}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20" uuid="e5464783-d74a-4405-9997-ddb1531c6e42"/>
<textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
我添加了 $V{REPORT_COUNT}
来实现数字 (1,2,3) .
输出将是
1 CM45024
2 CM45025
3 CM45026
注意:如果您想避免生成子报表,也可以使用 jr:table 组件来实现此目的(只需按上述方式定义 table 数据源)
我有一个字段值:
CM45024,CM45025,CM45026
我想使用子报表将其分成多个项目。我的 jrxml 来源是:
<field name="docIdNoGRN" class="java.lang.String">
<fieldDescription><![CDATA[docIdNoGRN]]></fieldDescription>
</field>
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement key="textField-53" x="311" y="1" width="88" height="15" uuid="2e040fd0-8fae-46e8-a845-fba421922992"/>
<textElement textAlignment="Center">
<font size="10"/>
</textElement>
<textFieldExpression><![CDATA[($F{docIdNoGRN} != null && $F{docIdNoGRN}.toString().length() > 0) ? $F{docIdNoGRN} : " "]]>
</textFieldExpression>
</textField>
该字段可以包含 3 个或更多项,具体取决于数据。而不是在报告中包含一项:
Item No. Item ID.
1 CM45024,CM45025,CM45026
我想这样显示:
Item No. Item ID.
1 CM45024
2 CM45025
3 CM45026
我正在使用 TIBCO Jaspersoft® Studio Professional - JasperReport 6.1.1 的可视化设计器。
这是使用子报表实现的方法,假设您的 $F{docIdNoGRN}
包含字符串 "CM45024,CM45025,CM45026"
生成将传递给子报表的数据源
<subreport> <reportElement x="163" y="15" width="200" height="100" uuid="9d6660e0-094e-4df3-9acb-74c031350b10"/> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList($F{docIdNoGRN}.split(",")))]]></dataSourceExpression> <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "your_subreport.jasper"]]></subreportExpression> </subreport>
如您所见,我 split(",")
您的字段 String
得到一个 Array
转换为 List
然后传入一个 JRBeanCollectionDataSource
- 设置子报表,引用我们的字符串的技巧是使用 _THIS 作为字段值
示例:(your_subreport.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="jTest_subreport2" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="23d7765f-250f-4632-94c6-bbd218db3d11">
<field name="_THIS" class="java.lang.String"/>
<detail>
<band height="35" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="716bb440-2692-4c58-a1b7-972aff240c67"/>
<textFieldExpression><![CDATA[$V{REPORT_COUNT}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20" uuid="e5464783-d74a-4405-9997-ddb1531c6e42"/>
<textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
我添加了 $V{REPORT_COUNT}
来实现数字 (1,2,3) .
输出将是
1 CM45024
2 CM45025
3 CM45026
注意:如果您想避免生成子报表,也可以使用 jr:table 组件来实现此目的(只需按上述方式定义 table 数据源)