新建模板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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)