动态设置页面显示的数据行数
一.需求描述
通常设置一个报表在页面中显示的数据行数,是在设计报表时,在报表属性中将报表的分页方式设定为按行分页,指定页面显示的数据行数,如何能更灵活的取更改页面显示的数据行数呢?
二.解决思路
使用直接指定报表模板名的方式发布报表方式,不能满足我们的需求,可以尝试润乾支持的definebean方式发布报表,通过报表定义对象中的getPrintSetup(); 获得到报表的打印属性,然后对其 设置按数据行数分页且每张纸打印的数据行数。
三.实现步骤
1.报表模板设计如下图1所示,在报表属性中设置其分页方式为按行分页,每页行数为20行。
2.参数报表设计如下图所示。
3.在showReport.jsp中,做如下操作:
(1)从参数缓冲池中取到参数pgc的值,即页面动态选择的报表展示的数据行数。
String reportParamsId=request.getParameter(“reportParamsId”);
Hashtable params = null;
String pgc=null;
if(!”".equals(reportParamsId) && reportParamsId != null){
params = com.runqian.report4.view.ParamsPool.get( reportParamsId );
String paramValue = (String) params.get(“pgc”);
if(paramValue!=null)
pgc = paramValue;
(2)使用reportDefine方式发布报表
<%
String filePath = application.getRealPath(reportFileHome+ File.separator +report);
ReportDefine rd = (ReportDefine)ReportUtils.read(filePath);
PrintSetup ps=rd.getPrintSetup();
ps.setRowNumPerPage(Integer.parseInt(pgc));
String rdID= “reportDefine”+String.valueOf((newDate()).getTime());
request.setAttribute(rdID,rd);
%>
<report:html name=”report1″
srcType=”defineBean”
beanName=”<%=rdID%>”
funcBarLocation=”top”
exceptionPage=”/jsp/myError.jsp”
/>
5.发布报表页面效果如下图所示。
四.需求总述
使用DefinedBean方式发布报表,除了动态修改报表指定数据行数外,还便于用户自定义数据源、自定义参数和宏等。不过对于本例来说,还需注意,每次发布报表的beanName的值需要不同,本例中使用String rdID= “reportDefine”+String.valueOf((new Date()).getTime())。