免费web报表系统FineReport的嵌套多模板联动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
免费web报表系统FineReport的嵌套多模板联动
1.问题描述
页面分成3个区域,分别对应三张不同的报表,一张主报表和2张子报表,互相之间通过超链,实现子报表的动态改变值的效果。
2.实现思路
通过html嵌套多个frame,首先在主表的frame上展示主表,然后在主表加载完触发加载结束事件,调用html中定义的js方法,给表2赋动态地址src,表3则在表2基础上触发加载结束事件调用js,动态给表3赋src。
3.实现步骤
3.1制作html页面
在html中定义frameset标签,组织多个窗口,通过frame设置特定的窗口区域,通过js判断对不同窗口区域设置不同模板地址,详细代码如下:
//在主模板加载结束事件触发zhu(classno)方法,并把classno传到html function zhu(classno){
var classno=classno;
//把获取参数classno赋值给表2模板
var zi1=
"/WebReport/ReportServer?reportlet=zi1.cpt&op=write&__showtoolbar__=false&classno="+ classno;
document.getElementById("zi1").src=zi1;
}
//主模板和表2模板加载完触发aa(stuno)方法
function aa(stuno){
var stuno=stuno;
//如果stuno为空的时候,则表3窗口赋值为空,不为空则动态给表3模板设置url if(stuno=='null')
{
var reportURL="";
document.getElementById("zi2").src=reportURL;
return false;
}else{
var reportURL= "/WebReport/ReportServer?reportlet=zi2.cpt&op=write&__showtoolbar__=false&stuno="+ stuno;
document.getElementById("zi2").src=reportURL;
}
}
3.2主表设置
▪超级链接
在主表点击超级链接传值到子表,设置超级链接>网页链接,URL地址则是输入本身模板地址,链接打开于选择当前窗口,参数则把点击的值传到子模板中,如classno=B2,如果不希望模板分页,则可添加参数op=write,设置如下图:
▪加载结束事件
因为不希望分页,则在填报预览下添加加载结束事件,根据个人情况而定是否显示工具栏,在加载结束事件中添加参数classno=$classno,在公式中使用$classno则可动态获取到点击超级链接的值,所以首先要在模板中定义报表参数classno;在三个窗口都显示值的情况下,又点击了主表中超级链接,这时就需要清空表3中的数据,所以添加参数stuno=null,传到html进行判断,清空表3数据。
在js中判断是否第一次访问主模板,不是则加载完触发html中定义js方法,代码如下:if(classno!='null'){
var zhu=parent.window;
zhu.zhu(classno);
zhu.aa(stuno);
}
设置的效果图如下:
3.3表2设计
通过主表传递参数,对表2进行过滤,进而展示数据。
▪超级链接
跟主表设置基本相同,添加网页链接,链接到本身模板,并把参数传值给本身和表3模板中,设置如下:
▪加载结束事件
只要控制表三模板即可,添加参数stuno=$stuno(首先定义报表参数stuno),在js中判断stuno不为空的情况下触发html中的方法,动态把url地址赋值给表3模块,js代码如下:if(stuno!='null'){
var zhu=parent.window;
zhu.aa(stuno);
}