zoukankan      html  css  js  c++  java
  • 自定义页码页码 GO

         有时候客户非要个页码,如果使用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(@tblNameand 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
    分页存储过程

    有什么问题的话欢迎指出来啊,希望能抛砖引玉 嘿嘿
  • 相关阅读:
    Spring加载xsd引起的问题小记
    kafka配置参数
    nginx常见内部参数,错误总结
    从毕业到现在的总结
    storm坑之---传递对象
    Java多线程读取大文件
    webpack4.0.1安装问题及解决方法
    git入门篇shell
    less教程
    原生js的ajax请求
  • 原文地址:https://www.cnblogs.com/askyes/p/846385.html
Copyright © 2011-2022 走看看