实现数据分页显示,请分享一下大家的实现方案!

实现数据分页,有很多种方案,为了操作更简单,报表效率更高,在此征集广大坛友的实现方案!
FR自身的分页方案有:
(1)单数据集分页SQL:通过sql语句实现分页,FR内置的有分页函数:
    SELECT *   
      FROM (  
            SELECT TOP ${  //TOP意思是去排名最靠前的
                         if(fr_pagenumber == int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount - (fr_pagesize*(fr_pagenumber-1)),fr_pagesize)  
                         } *        //其中,fr_rowcount是总行数,fr_pagesize是一页容量,fr_pagenumber是页码  
               FROM(  
                    SELECT TOP ${fr_pagesize*fr_pagenumber} *   
                      FROM 订单明细 ORDER BY 订单ID ASC   
                    ) AS e1 ORDER BY 订单ID DESC
             ) AS e2 ORDER BY 订单ID ASC  

效率较高,但是不能自定义分页按钮!
(2)条件属性控制分页:

优势在于操作简单并且可以自定义分页按钮,劣势在于读取太多数据,报表性能降低!
(3)通过动态参数传递到数据集进行数据过滤实现分页
定义两个模板参数:a、b
首先自定义分页按钮链接

中间单元格公式:if(I8 <= 5, range(1, I8), if(b < I8, range((b - 1) * 5 + 1, b * 5), if(b = I8, range(I9 - 4, I9), "")))
   超级链接至动态参数:a=$$$
   I 8单元格是数据集读取出来数据的总条数!
   a参数表示当前页码!
首页单元格链接至动态参数:a=1
尾页单元格链接至动态参数:a=if(I7 % 10 = 0, I7 / 10, (I7 - I7 % 10 + 10) / 10)
<<单元格链接至动态参数:b=if(b > 1, b - 1, if(b <= 1, 1, 1))
>>单元格链接至动态参数:b=if(b < I8, b + 1, if(b >= I8, I8, I8))
在数据集接收动态参数a,添加条件:
where ......
and id not in (
        select top ((${a}-1)*10) id from tableTest
)


在此,希望大家建言献策,得到更加合理、更高效的分页实现方案!


FineReportluojian8090 发布于 2014-1-19 22:31
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共7回答
最佳回答
1
luojian0323发布于2018-9-17 16:39(编辑于 2023-9-6 09:34)
555
最佳回答
0
sunflowerlove12发布于2014-1-22 09:58(编辑于 2023-9-6 09:34)
555
最佳回答
0
luojian8090发布于2014-1-23 08:29(编辑于 2023-9-6 09:34)
555
最佳回答
0
18717816110发布于2014-2-21 21:36(编辑于 2023-9-6 09:34)
555
最佳回答
0
hivenson发布于2016-3-31 14:00(编辑于 2023-9-6 09:34)
555
最佳回答
0
luojian0323发布于2018-9-17 16:12(编辑于 2023-9-6 09:34)
555
最佳回答
0
luojian0323发布于2018-9-17 16:14(编辑于 2023-9-6 09:34)
555
  • 0关注人数
  • 4317浏览人数
  • 最后回答于:2018-9-17 16:39
    活动推荐 更多
    热门课程 更多
    返回顶部