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
手机买吗
你知道吗
可怕