自定义页码页码

     有时候客户非要个页码,如果使用datalist时不像gridview可以有页码那个属性,鼠标点两下就ok了(不过有时候感觉自动生产的那种页码太死板,所以要自定义一下)。参数我用的是汉字,大家看了可不要拍板砖啊,呵呵。好了废话少说,贴代码


  public   string  setpagenum( int  总数据条数,  int  每页多少数据,  int  显示多少个页码,  int  当前页, string  url)
    {
        
// 设置页码 // /
         string  pageString  =   "" ;

        
int  总页数  =   0 ;
        
if  (总数据条数  %  每页多少数据  ==   0 )
        {
            总页数 
=  总数据条数  /  每页多少数据;
        }
        
else
        {
            总页数 
=  (总数据条数  /  每页多少数据)  +   1 ;
        }

        
// 如果当前页比总页数还多就把当前页设置最大
         if  (当前页  >  总页数)
        {
            当前页 
=  总页数;
        } 
// 如果当前页小于1就把当前页设置最小
         if  (当前页  <   1 )
        {
            当前页 
=   1 ;
        }

        
/// /{1}如果总页数没有超过【显示多少个页码*2】页
         if  (总页数  <=  (显示多少个页码  *   2 ))
        {
            
for  ( int  i  =   1 ; i  <=  总页数; i ++ )
            {
                
if  (i  ==  当前页)
                {
                    pageString 
+=   " <font color='red'>[ "   +  Convert.ToString(当前页)  +   " ]</font> " ;
                }
                
else
                {
                    pageString 
+=   " <a href=' "   + url + " ?page= " +  i.ToString ()  +   " '>[ "   +  i.ToString()  +   " ]</a> " ;
                }
            }
        }
        
else
        {
            
/// /{2}如果【当前页】加上【显示多少个页码】再加上1在总页数之内的话
             if  (显示多少个页码  +   1   +  当前页  >=  总页数)
            {
                
for  ( int  i  =  总页数  -  (显示多少个页码  *   2 ); i  <=  总页数; i ++ )
                {
                    
if  (i  ==  当前页)
                    {
                        pageString 
+=   " <font color='red'>[ "   +  Convert.ToString(当前页)  +   " ]</font> " ;
                    }
                    
else
                    {
                        pageString 
+=   " <a href=' "   + url + " ?page= " +  i.ToString ()  +   " '>[ "   +  i.ToString()  +   " ]</a> " ;
                    }
                }

            }
            
/// /{3}如果【当前页】在【显示多少个页码】页之内
             else     if  (显示多少个页码  >=  当前页)
            {
                
for  ( int  i  =   1 ; i  <=  (显示多少个页码  *   2 ) + 1 ; i ++ )
                {
                    
if  (i  ==  当前页)
                    {
                        pageString 
+=   " <font color='red'>[ "   +  Convert.ToString(当前页)  +   " ]</font> " ;
                    }
                    
else
                    {
                        pageString 
+=   " <a href=' "   + url + " ?page= " +  i.ToString ()  +   " '>[ "   +  i.ToString()  +   " ]</a> " ;
                    }
                }

            }
            
// {4}【当前页】不在前【显示多少个页码*2】和后【显示多少个页码*2】内
             else
            {
                
for  ( int  i  =  当前页  -  显示多少个页码; i  <=  当前页  +  显示多少个页码; i ++ )
                {
                    
if  (i  ==  当前页)
                    {
                        pageString 
+=   " <font color='red'>[ "   +  Convert.ToString(当前页)  +   " ]</font> " ;
                    }
                    
else
                    {
                        pageString 
+=   " <a href=' "   + url + " ?page= " +  i.ToString ()  +   " '>[ "   +  i.ToString()  +   " ]</a> " ;
                    }
                }
            }
        }
        
return  pageString;
        
// 设置页码结束 // /
    }


sql
create   PROCEDURE  page

@tblName     varchar ( 255 ),        --  表名

@strGetFields   varchar ( 1000 =   '  *  ' ,   --  需要返回的列 

@fldName   varchar ( 255 ) = '' ,       --  排序的字段名

@PageSize     int   =   10 ,           --  页尺寸

@PageIndex    int   =   1 ,            --  页码

@doCount    bit   =   0 ,    --  返回记录总数, 非 0 值则返回

@OrderType   bit   =   0 ,   --  设置排序类型, 非 0 值则降序

@strWhere    varchar ( 1500 =   ''    --  查询条件 (注意: 不要加 where)

AS

declare   @strSQL     varchar ( 5000 )        --  主语句

declare   @strTmp     varchar ( 110 )         --  临时变量

declare   @strOrder   varchar ( 400 )         --  排序类型
--
如果没有指定排序的列,就使用主键排序
  if   @fldName != ''
begin
set   @fldName = @fldName
end
else
begin
select   @fldName = [ name ]   from  syscolumns a  where   exists  ( select   *   from  sysindexkeys b  where  b.id = object_id ( @tblName and  a.id = b.id  and  a.colid = b.colid)
end


if   @doCount   !=   0

  
begin

    
if   @strWhere   != ''

    
set   @strSQL   =   ' select count(*) as Total from [ '   +   @tblName   +   ' ] where  ' + @strWhere

    
else

    
set   @strSQL   =   ' select count(*) as Total from [ '   +   @tblName   +   ' ] '

end   

-- 以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin

 

if   @OrderType   !=   0

begin

    
set   @strTmp   =   ' <(select min '

set   @strOrder   =   '  order by  '   +   @fldName   + '  desc '

-- 如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

    
set   @strTmp   =   ' >(select max '

    
set   @strOrder   =   '  order by  '   +   @fldName   + '  asc '

end

 

if   @PageIndex   =   1

begin

    
if   @strWhere   !=   ''    

    
set   @strSQL   =   ' select top  '   +   str ( @PageSize + '   ' + @strGetFields +   '   from [ '   +   @tblName   +   ' ] where  '   +   @strWhere   +   '   '   +   @strOrder

     
else

     
set   @strSQL   =   ' select top  '   +   str ( @PageSize + '   ' + @strGetFields +   '   from [ ' +   @tblName   +   ' ' +   @strOrder

-- 如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

-- 以下代码赋予了@strSQL以真正执行的SQL代码

set   @strSQL   =   ' select top  '   +   str ( @PageSize + '   ' + @strGetFields +   '   from [ '

    
+   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ ' +   @fldName   +   ' ]) from (select top  '   +   str (( @PageIndex - 1 ) * @PageSize +   '  [ ' +   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] '   +   @strOrder   +   ' ) as tblTmp) ' +   @strOrder

 

if   @strWhere   !=   ''

    
set   @strSQL   =   ' select top  '   +   str ( @PageSize + '   ' + @strGetFields +   '   from [ '

        
+   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ '

        
+   @fldName   +   ' ]) from (select top  '   +   str (( @PageIndex - 1 ) * @PageSize +   '  [ '

        
+   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] where  '   +   @strWhere   +   '   '

        
+   @strOrder   +   ' ) as tblTmp) and  '   +   @strWhere   +   '   '   +   @strOrder

end  

end    
 
exec  ( @strSQL )
 
GO
分页存储过程

有什么问题的话欢迎指出来啊,希望能抛砖引玉 嘿嘿

转载于:https://www.cnblogs.com/askyes/archive/2007/08/07/846385.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值