请问 gridview 能实现自定义分页吗? (比默认的效率好)
如果可以,请把代码放出来,让我学习一下.先谢谢了!如果不行,可以把其他方法的自定义分页代码放出来吗?比如储存过程分页
感激不尽!

解决方案 »

  1.   

    http://www.google.cn/search?complete=1&hl=zh-CN&newwindow=1&q=%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E9%A1%B5%E3%80%80gridview&meta=
      

  2.   

    储存过程分页
    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
      

  3.   

    这个是我改过的一个无错的 本人测试没有问题set ANSI_NULLS ON
    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