有没有方法使FineReport进行假分页,分页让数据库进行

有没有方法使FineReport进行假分页,分页让数据库进行,第1张

1、新建模板

新建模板mutipage.cpt,为了加快展示速度,我们可以使用分页查询,获取每个产品的详细信息并计算产品对应的订单中的应付金额,因此添加数据集时查询SQL语句为select 产品.产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品.单价, 产品.库存量, 产品.订购量,sum(应付金额) as 应付款项 from 产品,订单,订单明细 where 产品.产品ID=订单明细.产品ID and 订单明细.订单ID=订单.订单ID and 产品.产品ID between 10*(${page}-1)+1 and 10*${page} group by 产品.产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品.单价, 产品.库存量, 产品.订购量 order by 产品.产品ID,设置参数page的默认值为1,首次看到的是第一页,只查询出第1~20条记录;若page参数为2时,查询出第21~40条记录,即第二页内容。

2、自定义上一页、下一页按钮

在单元格中求出上一页、下一页页码的值

自定义上、下一页按钮

点击模板>模板web属性>分页预览设置,选择为该模板单独设置,在工具栏中增加两个自定义按钮分别命名为上一页,下一页,是工具栏上只剩下如下图所示几个按钮。

3、第一页与最后一页处理

求出总页数

双击总数所在单元格d出数据列设置对话框,选择高级>自定义显示,在自定义中填入公式:roundup($$$/10,0)求出总页数。

将第一行的行高设置为0,或者是隐藏:

上一页按钮设置:选中上一页自定义按钮,点击自定义JavaScript,在js中填入

var page= $("tr[tridx=0]","div.content-container").children().eq(0).html()  

if(page==0)//如果报表显示第一页,则上一页不可用

this.setEnable(false)

else

window.location.href="${servletURL}?reportlet=doc/Advanced/multipage.cpt&page="+page

下一页按钮设置与上一页的js差不多,只需要获取B1的值就可以了,所以在js中填入

var page= $("tr[tridx=0]","div.content-container").children().eq(1).html()  

var total=$("tr[tridx=0]","div.content-container").children().eq(2).html()  

if(parseInt(page) > parseInt(total))//如果报表显示最后一页,则下一页不可用

{

this.setEnable(false)

}

else

window.location.href="${servletURL}?reportlet=doc/Advanced/multipage.cpt&page="+page

分页预览即可查看效果

一.逻辑分页

1.逻辑分页的第一种方式,利用ResultSet的滚动分页。步骤如下:

a.根据条件sql查询数据库。

b.得到ResultSet的结果集,由于ResultSet带有游标,因此可以使用其next()方法来指向下一条记录。

c.利用next()方法,得到分页所需的结果集。

这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”。

代码如下:

/**

* TestPageResultSetDAO.java

*

* Copyright 2008. All Rights Reserved.

*/

package com.cosmow.pageresultset.dao

import java.sql.Connection

import java.sql.DriverManager

import java.sql.PreparedStatement

import java.sql.ResultSet

2.1 打开报表

打开报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\Pagination\GroupPagination.cpt。

修改报表样式如下:

2.2 分组设置

在A5单元格中,输入公式:=ds1.group(int(($$group_result_sequence-1)/5)),从上到下扩展,左父格设置为A4,B5父格设置为A5。

说明:该公式整体的意思是在父格货主地区组内,将订单记录每5条归为一组,公式的值为小组号,从0开始。若希望每个地区下每n条订单记录归为一组,公式修改为=ds1.group(int(($$group_result_sequence-1)/n))即可。

2.3 汇总设置

页内合计

地区下每一小组订单记录就为一页,页内汇总即对每一小组进行汇总。

设置页合计A6单元格左父格为A5,在E6单元格中输入公式=sum(E5),便对每一小组进行合计了。

组内合计

对每个货主地区进行汇总,设置组合计A7单元格左父格为A4,在E7单元格中输入公式=sum(E5)即可。

总合计

所有数据都扩展完后进行总计,不需要设置父格,直接在E8单元格中输入公式=sum(E5)即可。

2.4 分页设置

此时预览模板,每一小组还是显示在一页上面,因此需要设置分页。

右击A5单元格选择条件属性,添加分页,选择行前分页,条件类型选择普通, *** 作符里面选择不等于0,即每个地区下从第二小组开始行前分页,如下图设置:

2.5 保存与预览

保存模板。分页预览,其效果如上。模板效果在线查看请点击GroupInPageAmount.cpt

已完成模板可参考%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\Pagination\GroupInPageAmount.cpt。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10711990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存