日期:2014-05-18  浏览次数:20386 次

asp.net 自定义分页
请问   gridview   能实现自定义分页吗?   (比默认的效率好)
如果可以,请把代码放出来,让我学习一下.先谢谢了!

如果不行,可以把其他方法的自定义分页代码放出来吗?比如储存过程分页
感激不尽!

------解决方案--------------------
储存过程分页
create proc Sp_PageSize
@PageSize int, --当前要显示的页
@PageSizeCount int , --每页的记录条数

@UserstrSql NVARCHAR(2000), --查询SQL语句
@AllPageSize int out, --总的页数
@PageSizeAllCount int out --总的@UserstrSql总记录数
as
declare @CurrentFistItem int --当前页的首记录ident(自增的量)
declare @pageitemcount int --每页的最后一个记录templ
declare @strSql NVARCHAR(2000) --中间@UserstrSql
begin
set @strSql = REPLACE(@UserstrSql, 'from ', ',IDENTITY(INT, 1, 1) as templ into TemplTable from ')
set @strSql=@strSql

EXECUTE sp_executesql @strSql --形成要查找的数据

select @PageSizeAllCount=max(templ) from TemplTable --求出@UserstrSql总记录数
--计算总页数
if(@PageSizeAllCount % @PageSizeCount != 0)
begin
set @AllPageSize = @PageSizeAllCount / @PageSizeCount+1
end
else
begin
set @AllPageSize = @PageSizeAllCount / @PageSizeCount
end
if(@PageSize > @AllPageSize)
begin
set @PageSize = @AllPageSize
end
else if(@PageSize <= 0)
begin
set @PageSize = 1
end

set @CurrentFistItem = @PageSize * @PageSizeCount - @PageSizeCount + 1
set @pageitemcount = @CurrentFistItem + @PageSizeCount - 1
set @strSql = 'select * from TemplTable ' + ' where templ > = ' + CAST(@CurrentFistItem as NVARCHAR(50)) + ' and templ <= ' + CAST(@pageitemcount as NVARCHAR(50))

EXECUTE sp_executesql @strSql
drop table TemplTable
end

GO

-------- 调用示例 ----------
declare @AllPage int
declare @AllNum int
exec Sp_PageSize 5, 10, 'select content,difficult from e_Subject ', @AllPage, @AllNum
------解决方案--------------------
这个是我改过的一个无错的 本人测试没有问题

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[sp_page]

@strTable varchar(50), --表名
@strColumn varchar(50), --按该列来进行分页
@intColType int, --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型
@intOrder bit, --排序,0-顺序,1-倒序
@strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段
@intPageSize int, --每页记录数
@intPageNum int, --指定页
@strWhere varchar(800), --查询条件
@intPageCount int OUTPUT --总页数
AS


DECLARE @sql nvarchar(4000) --用于构造SQL语句
DECLARE @where1 varchar(800) --构造条件语句
DECLARE @where2 varchar(800) --构造条件语句
IF @strWhere is null or rtrim(@strWhere)= ' '
-- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格
BEGIN --没有查询条件
SET @where1= ' WHERE '
SET @where2= ' '
END
ELSE
BEGIN --有查询条件
SET @where1= ' WHERE ( '+@strWhere+ ') AND '
SET @where2= ' WHERE ( '+@strWhere+ ') '
END

set @strColumn = ' ' + @strColumn + ' '
set @strColumnlist = ' ' + @strColumnlist + ' '
--构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 )

SET