近来有很多客户想在工具栏中除了显示“第几页/共几页”外,还需要显示“共几条/本页几条”,即总记录数和当前页记录数。
我们先来看一下需要显示的效果:
我们知道,润乾报表内部的一些分页函数很容易得到总记录数和当前页记录数,如count和pccount,如果我们能将报表里对应的值显示到页面上就可以了。当然,我们也可以在页面里通过数据库查询操作得到上述数据,但是在页面上又进行一次同数据库的交互会导致数据显示效率的降低,所以我们最好还是将报表中的值显示到页面上。
我们可以通过js函数很方便的得到单元格值,再将其写回到对应的页面就可以了,接下来我们看一下具体的实现。
具体实现
我们先来看一下报表,设置报表按行分页,每页10行
比较简单的一个报表,A2 B2中相继使用了count和pccount函数得到总记录数和当前页记录数。
接下来我们看一下页面上的具体实现,工具栏通过toolbar.jsp实现,我们要修改其中显示的结果,所以需要将toolbar移到发布报表的页面上来。
将其代码都复制到testToolbar.jsp(发布报表的jsp)中,将原来显示页码的地方修改为:
<td width="40%" align="center" valign="middle" style="font-size:12px" >共<span id="t_page_span"></span>页/第<span id="c_page_span"></span>页 共<span id="total_rs"></span>条/本页<span id="page_rs"></span>条
修改report:html标签内容如下:
<report:html name="report1" reportFileName="<%=report%>"
funcBarLocation="" //去掉报表左上角的页码显示
needPageMark="yes" //该属性必须
generateParamForm="no"
params="<%=param.toString()%>"
generateCellId="yes" //生成浏览式报表的单元格ID
exceptionPage="/reportJsp/myError2.jsp"
/>
修改原来设置分页显示值的代码:
<script language="javascript">
//设置分页显示值
document.getElementById( "t_page_span" ).innerHTML=report1_getTotalPage();
document.getElementById( "c_page_span" ).innerHTML=report1_getCurrPage();
var totalr_rs = document.getElementById("report1_A1").innerText; //得到A1单元格值
var page_rs = document.getElementById("report1_B1").innerText; //得到B1单元格值
document.getElementById( "total_rs" ).innerHTML=totalr_rs;
document.getElementById( "page_rs" ).innerHTML=page_rs;
</script>
这里参照原来设置分页显示值的方式将获得的总记录条数很当前页记录条数写回Html页面。
总结
这里我们来总结一下,这里面需要注意的地方:
1、 pccount函数只有在分页的情况下才有效,如果不分页就不要写了;
2、 由于我们要更改原来工具栏上的显示外观,所以应该将原来工具栏写在这个页面上,其实是一样的,和原来的include。
3、 如果不希望报表左上角页码显示,那么将funcBarLocation="";
4、 由于浏览式报表展现的时候默认是不生成单元格ID的,这里为了取到对应单元格的值,得将generateCellId="yes"。
报表设计的时候,最好将那两个要取的值放到第一行中,并设置其行属性为报表头,如果不想显示这行,将其行高设置为0,不能设置隐藏。