我需要在主报表的< code >列表的帮助下向子报表传递一个数据源
主报告中的片段:
<parameter name="seznamPriloh" class="java.util.List" isForPrompting="false"/>
....
<subreport>
<reportElement x="0" y="56" width="555" height="76"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{seznamPriloh})]]></dataSourceExpression>
<subreportExpression><![CDATA[cz.alis.keong.jasjdr.reporting.ReportCompiler.compile("R79_SeznamPriloh")]]></subreportExpression>
</subreport>
我的子报表中的代码段:
<detail>
<band height="23">
<textField>
<reportElement x="56" y="3" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{}]]></textFieldExpression>
</textField>
</band>
</detail>
请告诉我如何通过java.util.List的主报表参数将数据源传递给子报表
编辑:08.14 14:20向Java添加标签
编辑:08.14 15:30与如何打印iReport中另一个列表中包含的字符串列表有关?并适用于4.5.0和
列表
是的,它有效。它完全没有明确的文档记录,但它可以与jasperreport 4.5.1一起使用。
您必须在名为“_THIS”的子报表中声明一个字段,该字段使用您要显示的原始类型键入。在本例中,字符串。
子报告
<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="testSubReport" pageWidth="555" pageHeight="802" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isSummaryWithPageHeaderAndFooter="true" whenResourceMissingType="Empty">
<queryString>
<![CDATA[]]>
</queryString>
<field name="_THIS" class="java.lang.String"/>
<pageHeader>
...
然后在想要显示字符串值的子报表中,只需使用$F{_THIS}。
<detail>
<band height="25">
<textField isStretchWithOverflow="true">
<reportElement x="37" y="5" width="503" height="15">
</reportElement>
<textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
</textField>
</band>
</detail>
主要报告
父报表以数据源表达式的形式提供列表
<subreport>
<reportElement positionType="Float" x="0" y="4" width="554" height="1"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{bean}.getListeOfStringsMethode())]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{subreportPrimitiveTypeList}]]></subreportExpression>
</subreport>
我在这里获得灵感
您可以使用此数据源表达式将java.util.List(通过参数)传递给子报表:
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{seznamPriloh})]]></dataSourceExpression>
工作样本、主报告:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<parameter name="listParam" class="java.util.List"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["<subreport_dir>"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT id, street, city FROM address]]>
</queryString>
<field name="ID" class="java.lang.Integer"/>
<field name="STREET" class="java.lang.String"/>
<field name="CITY" class="java.lang.String"/>
<detail>
<band height="57" splitType="Stretch">
<frame>
<reportElement x="0" y="0" width="539" height="57"/>
<box>
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<subreport>
<reportElement x="0" y="32" width="523" height="17"/>
<subreportParameter name="cityParam">
<subreportParameterExpression><![CDATA[$F{CITY}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listParam})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subreport_list_as_param.jasper"]]></subreportExpression>
</subreport>
<textField>
<reportElement x="300" y="0" width="208" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["City: " + $F{CITY}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="200" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["Street: " + $F{STREET}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["Id: " + $F{ID}]]></textFieldExpression>
</textField>
</frame>
</band>
</detail>
</jasperReport>
子报表:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<parameter name="cityParam" class="java.lang.String"/>
<field name="id" class="java.lang.Integer"/>
<field name="station" class="java.lang.String"/>
<field name="city" class="java.lang.String"/>
<filterExpression><![CDATA[$F{city}.equals($P{cityParam})]]></filterExpression>
<title>
<band height="39">
<textField>
<reportElement x="220" y="14" width="161" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true" isItalic="true"/>
</textElement>
<textFieldExpression><![CDATA["City param: " + $P{cityParam}]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<box leftPadding="10"/>
<textElement/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20"/>
<box leftPadding="10"/>
<textElement/>
<textFieldExpression><![CDATA[$F{station}]]></textFieldExpression>
</textField>
</band>
</detail>
<noData>
<band height="50">
<textField>
<reportElement x="220" y="17" width="161" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true" isItalic="true"/>
</textElement>
<textFieldExpression><![CDATA["No data for city param: " + $P{cityParam}]]></textFieldExpression>
</textField>
</band>
</noData>
</jasperReport>
传递List的Java代码:
Map<String, Object> params = new HashMap<String, Object>();
List<TestBean> beansList = new ArrayList<TestBean>();
// The TestBean class constructor is:
//public TestBean(String city, Integer id, String station)
TestBean bean = new TestBean("Dallas", 10, "Central park st.");
beansList.add(bean);
bean = new TestBean("Dallas", 11, "Railway st.");
beansList.add(bean);
bean = new TestBean("Dallas", 12, "Market st.");
beansList.add(bean);
bean = new TestBean("Lyon", 20, "Airport st.");
beansList.add(bean);
params.put("listParam", beansList);
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getDemoHsqldbConnection());
JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
结果将是(生成的PDF文件的视图):
你可以看看net.sf.jasperreports.engine.JRDataSource的实现。最适合您的案例的是:JRBeanCollectionDataSource和JRBeanArrayDataSource。如您所见,它们都是基于Bean的。
我认为你可以很容易地转换你的列表
或者您可以实现自己的JRDataSource。
您必须指定在子报表中使用的字段。您正在传递 $F{}
,并且当您传递列表时
问题内容: 我需要借助主报表参数将 数据源 传递给子报表 。我不知道什么是正确的 dataSource 类型以及如何在子报表中获取值。 我的主报告的摘录: 我的子报表的摘录: 请告诉我如何通过主报表的 类型参数将数据源传递到子报表。 编辑:08.14 14:20将标签添加到Java 编辑:08.14 15:30与有关如何在iReport中打印另一个列表中包含的字符串列表?并适用于4.5.0和 问题
我需要用不同对象的列表填充几个子报表。基本上,假设我有以下内容:< br >二手车子报表< br >新车子报表< br > 我用字符串形式的变量创建了一个vehicle bean类,并为其创建了getter和setter方法。然后在我的数据源中,我传入一个< code >列表 我在主报表中创建了一个字段详细信息行作为类型列表。然后,我将以下内容传递给子报表数据源表达式,new 有什么方法可以将 从
我正在从 JRBeanCollectionDataSource 生成报告。此报告是关于客户的订单的。 这是我的代码 当客户时,需要生成包含客户详细信息和客户订单列表的报告。由于接受一个集合,这就是我所做的。 如何提取< code>Customer中的< code>CustomerOrder列表并将其作为子报表传递?
type String - rawData. bytes Buffer - 要上传的数据。
我试图用Scala编写一个Jasper报告程序,其中的数据结构是动态创建的。数据源将是对象的列表(请参见下面的case类),其中每个数据对象都是字符串和int的列表。 报表中的每一行都有诸如data.strings(0)、data.strings(1)等字段。 有什么想法可以实现这一点吗?
我需要您的帮助,将csv数据源传递给subReports。 我将非常感谢您的建议或解决方案。 我使用的是iReport 5.0专业版。 我有一个非常复杂的报告,该报告从多个(大约10个)csv文件中获取数据。 我已经为报告的每个部分创建了子报告,每个子报告作为一个单独的报告运行良好。 但是当我尝试将所有子报表集成到主报表中时,我无法将数据源传递给子报表。 在Main报告中,我创建了一个名为CSVD