当前位置: 首页 > 知识库问答 >
问题:

主报表中的多个子报表使用相同的数据源

方增
2023-03-14

我有一个主报告和两个子报告。我正在使用自定义数据源来获取报表内容。但是在jasper studio中预览主报表时,只显示一个子报表(无论哪个子报表先出现)。

为(如)。只显示report1.jrxml,如果删除子报表,则显示report2.jrxml。

<detail>
    <band height="250">
        <subreport runToBottom="true">
            <reportElement positionType="Float" x="0" y="130" width="1960" height="120" uuid="89a9f872-756e-4c82-922d-537cfde30cca"/>
            <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
            <subreportExpression><![CDATA["report1.jrxml"]]></subreportExpression>
        </subreport>
    </band>
    <band height="250">
        <subreport runToBottom="true">
            <reportElement positionType="Float" x="0" y="90" width="1960" height="120" uuid="892c0849-9532-48cb-94c0-f2e87528232a"/>
            <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
            <subreportExpression><![CDATA["report2.jrxml"]]></subreportExpression>
        </subreport>
    </band>
</detail>

我已经试用了以下方法:

  1. 将子报告放置在不同的详细信息带中。
  2. 将“位置类型”设置为“浮动”。
  3. 将“运行到底部”属性设置为“true”。

共有1个答案

裴欣荣
2023-03-14

问题是试图为多个子报表使用相同的数据源。第一个子报表的数据源已耗尽,因此后续子报表没有可用的数据。

解决方案:

您必须使用JRRewindableDataSource倒带数据源

package com.jasper.api;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRewindableDataSource;

public class RewindableDSWrapper implements JRRewindableDataSource {

  private final JRRewindableDataSource ds;

  public RewindableDSWrapper(JRRewindableDataSource ds) {

    this.ds = ds;

    try {
        this.ds.moveFirst();
    } catch (JRException e) {
        e.printStackTrace();
    }

  }

  public boolean next() throws JRException {

    return ds.next();

  }

  public Object getFieldValue(JRField jrField) throws JRException {

    return ds.getFieldValue(jrField);

  }

  public void moveFirst() throws JRException {

    ds.moveFirst();

   }

 }
public void moveFirst() throws JRException {
    // provide logic for rewinding datasource
}
<dataSourceExpression><![CDATA[new com.jasper.api.RewindableDSWrapper((JRRewindableDataSource)$P{REPORT_DATA_SOURCE})]]></dataSourceExpression>

还要将包含RewindableDSWrapper类的jar文件添加到Studio中的类路径中。

 类似资料:
  • 你好,在我解释我的问题之前,我会告诉你我想回答什么。 我正在尝试创建一个子报告,显示用户的不同收入。一个用户可以收到多次捐赠,出售了多栋房子/房产,赢得了比赛等。所有这些操作都有更多关于他们收到多少钱、缴纳的税款的详细信息,… 现在,我正在尝试在一个细节中显示用户的详细信息(姓名,姓氏,..;)。这行得通。下一个细节带将用于捐赠。我创建了一个子报表,在其中指定了此部分的布局。但是,此子报表所需的数

  • 我有一个使用iReport在jasper报告2.0.4中创建的报告。我有两个子报告。这两个子报告共享相同的jrxml。我在参数中传递jrxml作为子报告的报告表达式。我有这个参数的代码 一切都很好。问题出在两个子报表数据源上 这些子报表的数据源来自作为参数传递的同一个POJOs列表 以下是两个子报表的子报表jrxml代码 第一 第二 您看,这两个子报告具有相同的代码。 奇怪的是,两个子报告显示,但

  • 我正在评估JasperReports和Jaspersoft Studio以便在我工作的公司中使用,我试图构建一个包含来自两个不同数据库的信息的报告。 子报表在我拥有的Vertica数据库中运行如下: 正如所说,他们两个都是分开运行的。 null 我是否可以让子报表在与主报表不同的数据库/数据源中运行查询?

  • 使用的开发IDE:Jaspersoft Studio 我试图使用下面的表达式将主报表数据源用于表数据集,但没有得到任何数据。 请说明如何将数据源从报表传递到表。我对jasper报告很陌生。样品会很有用。 JRXML: Json数据: 我已经添加了我试图加载的JRXML和Json。当我在数据集中传递dataSourceExpression时,我只得到2行,但在源数据中有3行。请帮我解决这个问题

  • 问题内容: 我用相同的数据源调用两个子报表,但是当我打印此报表时,只有我的第一个子报表填充了表格。 这就是我通过报告的方式。 虽然,我已经注意到,如果我像下面那样传递2个不同的对象,则它可以工作(下面对jrxml进行了相关修改),我得到了两个子报表。 这与成为消耗品有关吗? 这是我的主要jrxml 这是我的子报告 进行更改以使其可以使用2个参数 有什么更好的解决方法? 问题答案: 正如您在api中

  • 我目前的技能只能通过使用JRBeanCollectionDataSource(list)作为数据源,在不使用子报表的情况下制作pdf。(数据打印成功) 谁能告诉我如何制作包含多个子报表的pdf报表,主jrxml文件和子报表jrxml文件中应该包含哪些内容,以及java代码中应该包含哪些内容?以及如何使用多个JRBeanCollectionDataSource(列表)?我唯一知道的是使用Map pa