请问 gridview 能实现自定义分页吗? (比默认的效率好)
如果可以,请把代码放出来,让我学习一下.先谢谢了!如果不行,可以把其他方法的自定义分页代码放出来吗?比如储存过程分页
感激不尽!
如果可以,请把代码放出来,让我学习一下.先谢谢了!如果不行,可以把其他方法的自定义分页代码放出来吗?比如储存过程分页
感激不尽!
解决方案 »
- 求大神解决一个用SQL过滤查询的问题
- MVC和kendoUI中的Grid
- windows xp sp3下IIS6.0怎么配置?
- 点击链接触发事件
- 请教下一段关于天气的字符串的格式化问题(可能要结合正则)
- 请问一下,如下访问错误,是怎么回事,谢谢
- 如果把DataRow还原为DataTable?
- 重装系统,打开原来sln,重新生成提示错误:加载属性“OutputPath”失败。“输出路径”必须位于项目文件夹下。
- --------TreeView-----------
- SQL查询语句的问题!!!!(新手学习中)
- GridView中TemplateField里的控件的属性问题
- ASP.NET2.0 不进行验证
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
endGO-------- 调用示例 ----------
declare @AllPage int
declare @AllNum int
exec Sp_PageSize 5, 10, 'select content,difficult from e_Subject', @AllPage, @AllNum
set QUOTED_IDENTIFIER ON
goALTER 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 @sql='SELECT @intPageCount=CEILING((COUNT(*)+0.0)/'
+ CAST(@intPageSize AS varchar)
+ ') FROM ' + @strTable + @where2 --执行SQL语句,计算总页数,并将其放入@intPageCount变量中 EXEC sp_executesql @sql,N'@intPageCount int OUTPUT',@intPageCount OUTPUT
--将总页数放到查询返回记录集的第一个字段前,此语句可省略
--SET @strColumnlist= Cast(@intPageCount as varchar(30)) + ' ' + @strColumnlist IF @intOrder=0 --构造升序的SQL
BEGIN
SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) +
@strColumnlist +
' FROM ' + @strTable + @where1 +
@strColumn + '>(SELECT MAX('+@strColumn+') '+
' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) +
@strColumn + ' FROM '+ @strTable+@where2+'ORDER BY '+@strColumn+') t) ORDER BY '+ @strColumn
END
ELSE --构造降序的SQL
BEGIN
SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) +
@strColumnlist+
' FROM '+ @strTable + @where1 +
@strColumn + '<(SELECT MIN('+@strColumn+') '+
' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) +
@strColumn + ' FROM '+ @strTable+@where2+'ORDER BY '+@strColumn+' DESC) t) ORDER BY '+
@strColumn + ' DESC'
END
IF @intPageNum=1--第一页
BEGIN
SET @sql='SELECT TOP '+CAST(@intPageSize AS varchar) + @strColumnlist + ' FROM '+@strTable+
@where2+'ORDER BY '+@strColumn
IF @intOrder=0
SET @sql=@sql+''
ELSE
SET @sql=@sql+' DESC'
END EXEC(@sql) GO