有没有方法使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

分页预览即可查看效果

从0开始,表示第一条记录number2

表示是指从开始位置,number2

这个是MYSQL自带分页功能!

number1

表示是指记录从第几条记录开始取mysql

是可以用这样的

在你的SQL后面加上

这个

limit

number1。你可以底层封装成2个参数传递到数据库即可做到分页效果!纯手打

真心希望你学业有成!歇息

求给力,取number2条数据

可以用存储过程来写

USE [Test]

GO

/****** Object:  StoredProcedure [dbo].[proc_CommonPage]    Script Date: 08/29/2014 16:41:17 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[proc_CommonPage]

/*

****************************************************************************************************

*** 用于SqlServer2005(及以上)的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一) ***

****************************************************************************************************

*/

@TableNames varchar(MAX), --表名(支持多表)

@FieldStr varchar(4000)='*', --字段名(全部字段为*)

@SqlWhere varchar(4000), --条件语句(不用加where)

@GroupBy varchar(4000), --Group语句(不用加Group By)

@OrderBy varchar(4000), --排序字段(必须!支持多字段,不用加Order By)

@PageSize int, --每页多少条记录

@PageIndex int, --指定当前为第几页

@TotalPage int output, --返回总页数

@TotalRecord int output --返回总条数

--with encryption --加密时使用

As

Begin

-- Begin Transaction

If @SqlWhere = ''

SET @SqlWhere = NULL

If @GroupBy = ''

SET @GroupBy = NULL

Declare @Sql nvarchar(4000)

--计算总记录数

SET @Sql = 'select @TotalRecord = count(*) from (SELECT 1 A FROM ' + @TableNames+''

 

If (@SqlWhere !='' or @SqlWhere is not NULL)

SET @Sql = @Sql + ' where ' + @SqlWhere

If (@GroupBy !='' or @GroupBy is not NULL)

SET @Sql = @Sql + ' GROUP BY ' + @GroupBy

SET @Sql=@Sql+')T '

EXEC sp_executesql    @Sql,

                    N'@TotalRecord int output',

                    @TotalRecord OUTPUT --计算总记录数

        

--计算总页数

SET @TotalPage = CEILING((@TotalRecord + 0.0) / @PageSize)

--处理页数超出范围情况

if @PageIndex <= 0

SET @PageIndex = 1

if @PageIndex >@TotalPage

SET @PageIndex = @TotalPage

--处理开始点和结束点

Declare @StartRecord int

Declare @EndRecord int

SET @StartRecord = (@pageIndex - 1) * @PageSize + 1

SET @EndRecord = @StartRecord + @PageSize - 1

--合成sql条件

Declare @TempStr varchar(4000)

If (@SqlWhere != '' or @SqlWhere is not NULL)

SET @TempStr = ' where ' + @SqlWhere

If (@GroupBy != '' or @GroupBy is not NULL)

SET @TempStr = @TempStr + ' Group By ' + @GroupBy

 

--如果是第一页

If (@PageIndex = 1)

Begin

SET @Sql = 'select top ' + CONVERT(varchar(50), @PageSize) + ' row_number() over(order by ' + @OrderBy + ') as rowId,' + @FieldStr + ' from ' + @TableNames

If (@TempStr !='' or @TempStr is not NULL)

SET @Sql = @Sql + ' ' + @TempStr

End

Else

Begin

SET @Sql = 'select row_number() over(order by ' + @OrderBy + ') as rowId,' + @FieldStr + ' from ' + @TableNames

If (@TempStr !='' or @TempStr is not NULL)

SET @Sql = @Sql + ' ' + @TempStr

SET @Sql = 'Select * from (' + @Sql + ') as TempTable where rowId between ' + CONVERT(varchar(50), @StartRecord) + ' and ' + CONVERT(varchar(50), @EndRecord)

End

--执行查询

PRINT @Sql

EXEC (@Sql)

-- If @@Error <>0

-- Begin

-- RollBack Transaction

-- Return -1

-- End

-- Else

-- Commit Transaction

End

/*

****************************************************************************************************

*** 用于测试分页 ***

****************************************************************************************************

*/

--declare @TotalPage int

--declare @TotalRecord int

--exec P_PAGING '表1, 表2', '表1.*', '表1.关联列=表2.关联列 and 其它条件', '无', '表1.排序列 desc',50, 6, @TotalPage output, @TotalRecord output

--select @TotalPage

--select @TotalRecord

select * from CF01


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存