报表知识库
我要提问

如何使用分页函数来显示当前页记录条数

润乾报表中提供了强大的分页函数,解决了让开发者头疼的报表页码和总页数等问题。下面就利用分页函数来实现在报表中显示当前页的记录条数。

首先看这样一个简单的网格式报表:

报表模版:

1.png

其中,连接的数据源为设计器自带的demo数据源,sql如下:

Ds1:SELECT EMPLOYEE.EMPID,EMPLOYEE.EMPNAME,EMPLOYEE.BIRTHDAY,EMPLOYEE.SEX,EMPLOYEE.DEGREE,EMPLOYEE.BONUS FROM EMPLOYEE

Ds2:SELECT DEGREE.ID,DEGREE.NAME FROM DEGREE

各单元格表达式为:

A4: =ds1.Select(int(EMPID),false)

B4: =ds1.EMPNAME

C4: =ds1.BIRTHDAY,显示格式为:yyyy年MM月dd日

D4: =ds1.SEX,显示值为:map(list(”1″,”2″),list(”男”,”女”))

E4: =ds1.DEGREE,显示值为:ds2.select1(name,id==value())

F4: = ds1.BONUS,显示格式为:¥#0.00

设置报表属性中的分页属性为按行分页,每页10行(标题,表头,页眉不计算在内)

Web页面效果如下:

2.png

下面,就在此报表的基础上,给每页增加总记录数和本页记录数的显示。

先在报表模版中追加一行,并设置为报表尾:

在F5单元格中写上:=ds1.count(),用来计算一下整个报表的记录条数。

接着,再追加一行报表尾,合并整行单元格后,写入表达式:

=if(pno() != 0,”本页”+count(A4{})+”条/共”+ F5+”条”,”本页10条/共10条”)

解释一下这个表达式的意思:

第一步,用if函数来对分页进行判断,pno() != 0的意思是,当前页码不为0即分页至少有两页。

第二步,在分页的情况下,count(A4{})为计算本页中A4扩展出来的条数即当前页的记录数。并引用了F5单元格的整个报表总记录条数,最后拼接而成。

第三步,设置缺省条件下的记录数显示,即报表只分了一页,当然本页只有10条且一共10条记录。

第四步,由于在最终的效果中不需要看到第五行,所以把这行设置为隐藏行。

3.png

看一下页面显示效果:

第一页

4.png

最后一页:

5.png

可以看出,在最后一页中只有8条记录,而下方的显示也是正确的。

这时会有这样一个疑问,为什么一定要用到分页函数pno()呢,原因是这样的,只有在分页后的当前页中,count(A4{})出来的记录数才是正确的,否则的话就对没有分页的报表中所有的A4进行计数了,用分页函数pno()实际上就是限定了count()函数的作用范围。