jasperreport 教程 JasperReport 个人使用的一些经验(3)

电脑杂谈  发布时间:2017-02-06 14:19:33  来源:网络整理

5.准备好上述数据后,开始在iReport上操作了,绑定测试数据源到iReport.

MainVO的测试数据源:

SubVO的测试数据源:

6.准备好数据源后开始设计JasperReport模板

模板和对象绑定,在MainVOReport(上图)的空白处点一下,然后点击那个小图标:

会打开下面界面,选择DataSource Provider:

点击Get Field from datasource, 会获取到MainVo的属性,如上图下半部分所示.

7.子报表关联

我们需要将MainVo中的List属性值显示在子报表里面,就需要设置一个变量来传值了.

1)在MainVOReport界面,添加一个Variables, 命名为other,设置如下图所示:

2)然后点击MainVOReport界面上的子报表,在右边的属性设置如下图:

3)创建Scriptlet,用来连接设置变量值

import java.util.List;
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRScriptletException;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class MainReportScriptlet extends JRAbstractScriptlet {
    @Override
    public void afterDetailEval() throws JRScriptletException {
       System.out.println("afterDetailEval...");
       List subList = (List)getFieldValue("subList");
       JRDataSource jr = new JRBeanCollectionDataSource(subList);
       /**
        *该值是在父报表中定义的一个变量Variables,
        *类型为net.sf.jasperreports.engine.JRDataSource
         *(就是上图的变量设置)
        **/
         setVariableValue("other", jr);
    }

    @Override
    public void beforeReportInit() throws JRScriptletException {
    }

    @Override
    public void afterReportInit() throws JRScriptletException {
    }

    @Override
    public void beforePageInit() throws JRScriptletException {
    }

    @Override
    public void afterPageInit() throws JRScriptletException {
    }

    @Override
    public void beforeColumnInit() throws JRScriptletException {
    }

    @Override
    public void afterColumnInit() throws JRScriptletException {
    }

    @Override
    public void beforeGroupInit(String arg0) throws JRScriptletException {
    }

    @Override
    public void afterGroupInit(String arg0) throws JRScriptletException {
    }

    @Override
    public void beforeDetailEval() throws JRScriptletException {
    }
}

上面三步就是创建子报表的重要三步,我刚开始也是这里没摸索到.

8.子报表设计

子报表的设计和主报表是一样的,因为它在这里是一个单独的报表,可以用自己的数据源来测试,也就是我们上面创建的SubFactory

子报表对象绑定,由于主报表和子报表使用的数据源不同,对象属性绑定方式稍有不同,如下图所示:

9.编译报表

不同的报表选择不同的数据源来编译.

选择相对应的数据源后,点击报表工具栏上的preview来预览,预览时会先编译,然后填充数据,有问题的话这个时候会暴露出来,根据错误提示自己再查找查找原因吧.

子报表变动要先编译子报表,然后编译主报表.

好了,目前就先分享到这里, 上面自己的分享如果有不对之处,欢迎大家提出,并分享.

顺便分享几个链接,对于学习JasperReport比较有帮助,这边文章的部分内容也参考了下面的链接:

1、ireport + jasperreport(上中下)

2、利用复合的javabean构造基于jasperreports的子报表 (子报表内容基本上参考自这里)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-30895-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...