分页的一些汇总

说到分页最基本的就是要计算起始位置。和分页数。这里总结一下。有的自己尝试过。有的来自网络。

1:常用的方法

pageIndex:当前页码

pageSize:每页显示的记录数

pageCount:总页数

计算起始位置:

int start (pageIndes-1)*pageSize+1;

int end = pageIndex*pageSize;

计算总页数

int pageCount = Convert.ToInt32(Math.Ceiling((double)coun/pageSize)); //coun为总记录数

2:这样你也可以试试

     $curr_index, 当前页码.

   $link_count, 链接数量.

  $page_count, 当前的数据的总页数.

   $start, 显示时的起始页码.

   $end, 显示时的终止页码.

     start = Math.max(1, curr_index - parseInt(link_count/2));

  end = Math.min(page_count, start + link_count - 1);

  start = Math.max(1, end - link_count + 1);

看看分页存储过程

ALTER PROCEDURE [dbo].[Pro_GetPagedList]
    @start int,
    @end int,
    @category int=0,
    @order    nvarchar(20)='id'
AS
BEGIN

    SET NOCOUNT ON;

    declare @sql nvarchar(1000)
    
    
    
    set @sql = 'select * from (select *,Row_Number() over(order by '+@order+ ' ) rownumber from books where CategoryId=1) t'
    + ' where t.rownumber>='+Convert(nvarchar(10),@start)+' and t.rownumber<='+Convert(nvarchar(10),@end)
    --EXEC (@sql)
    --EXEC SP_EXECUTESQL @sql
    EXEC (@sql)

    set Nocount off;
END
USE [bb]
GO
/****** Object:  StoredProcedure [dbo].[Pro_Page]    Script Date: 08/11/2013 16:50:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Pro_Page]
(
@tblName   varchar(255),       -- 表名

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

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

@PageSize   int = 40,          -- 页尺寸

@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 @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)

订单存储过程

USE [bb]
GO
/****** Object:  StoredProcedure [dbo].[usp_CreateOrder]    Script Date: 08/11/2013 16:47:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[usp_CreateOrder]
    -- Add the parameters for the stored procedure here
    @OrderNum nvarchar(30),--订单号
    @UserId int,   --userid
    @Address nvarchar(255), --传一个地址
    @totalMoney money output --返回一个总金额
AS
BEGIN    
    SET NOCOUNT ON;
    
    declare @error int --记录事务中的每一个sql语句是否都执行成功

    
    --计算该用户订单的总价格
    select @totalMoney=sum([count]*unitprice) from cart
    join books on cart.bookid=books.id
    where userid=@UserId
    
    
    --当用户调用这个存储过程时,购物车中没有书则求总价格为null
    if (@totalMoney is null)
    begin
        raiserror ('购物车为空',18,1)
        return
    end
    
    set @error=0
    begin transaction    
    --生成主表(表头)
    insert into orders(OrderId, OrderDate, UserId, TotalPrice, PostAddress, [state])
    values(@OrderNum,GetDate(),@UserId,@totalMoney,@Address,0)
    set @error=@error+@@error  --记录上面一句sql语句是否执行成功
    
    --插入明细表(表身)
    insert into orderbook(OrderID, BookID, Quantity, UnitPrice)
    select @OrderNum,BookId,[Count],unitprice  from cart join books on cart.bookid=books.id
    where UserId=@UserId
    set @error=@error+@@error  --记录上面一句sql语句是否执行成功
    
    --清空该用户的购物车
    delete from cart where UserId=@UserId
    set @error=@error+@@error  --记录上面一句sql语句是否执行成功
    
    --检测事务中的sql语句有没有出错的
    if (@error=0)
    begin
    --都执行成功了
        commit transaction
    end
    else
    begin
        rollback transaction
        raiserror('生成订单时出错.',18,1)
    end
    
USE [bb]
GO
/****** Object:  StoredProcedure [dbo].[Pro_OrderCreate]    Script Date: 08/11/2013 16:47:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Pro_OrderCreate]
    @OrderNmber nvarchar(50),
    @UserId int,
    @Address nvarchar(255),
    @TotalMoney money output
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    declare @error int;--用于记录事务中的每一个sql语句是否执行成功
    set @error=0;    
    
    SELECT @TotalMoney=sum(unitprice*count) from cart join books on cart.bookid=books.id
     where userid=@UserId
     
     if (@TotalMoney is null)
     begin
     --说明该用户在当前购物车中就没有定单
     raiserror ('购物车中没有图书',18,18)
     return;     
     end
     
     
     
     
     --下面开始生成定单
     --开始一个事务
     begin transaction--开启一个事务
     --插入表头     
     insert into orders (OrderId,OrderDate,UserId,TotalPrice,PostAddress,state)
     values(@OrderNmber,getdate(),@UserId,@TotalMoney,@Address,0)
     set @error=@error+@@error;--检测上一句sql语句是否出错
     
     --插入表身
     insert into OrderBook
     select @OrderNmber,BookId,[Count],UnitPrice  from cart join Books on  cart.bookid=books.id where UserId=@UserId
     set @error=@error+@@error;--检测上一句sql语句是否出错
     
     delete from cart where UserId=@UserId;
     set @error=@error+@@error;--检测上一句sql语句是否出错
     
     if (@error>0)--说明在这个事务中有某个sql语句出错了我们需要回滚
     begin
        rollback transaction
        raiserror ('生成定单时出错',18,18)
        return;
     end
     else
     begin
        commit transaction
     end
    SET NOCOUNT OFF;

    -- Insert statements for procedure here
    
END

分页 这里只有关键代码。没有样式。

 //params:
        //currentPage:当前页面, pageCount:总页数
        function createPageBar(currentPage, pageCount) {
            var start = currentPage - 5; //表示起始位置.

            if (start <= 1) { start = 1; }

            var end = start + 10; //求出终止位置。
            if (end >= pageCount) {
                end = pageCount;
                start = pageCount - 10 < 1 ? 1 : pageCount - 10; //注意:
            }


            var $html = "";

            //添加上一页
            if (currentPage > 1) $html += '<li class="last"><span class="page_live">上一页</span></li>';
            else  $html += '<li class="last"><span>上一页</span></li>';


            //前缀
            if (start == 2) {
                $html += '<li><span class="page_live">1</span></li>';
                //$html += '<li><span name="pa" style="border:none;">...</span></li>';
            }
            else if (start > 2) {
                $html += '<li><span class="page_live">1</span></li>';
                $html += '<li><span name="pa" style="border:none;">...</span></li>';
            }

            for (var i = start; i <= end; i++) {
                if (i == currentPage) {//如果等于当前页码,则需要选中

                    $html += '<li><span class="page_active">' + i + '</span></li>';
                }
                else {
                    $html += '<li><span class="page_live">' + i + '</span></li>';
                }
            }

            //后缀
            if (end != pageCount) {
                $html += '<li><span name="pa" style="border:none;">...</span></li>';
                $html += '<li><span class="page_live">' + pageCount + '</span></li>';
            }
            //添加下一页
            if (currentPage < pageCount) $html += '<li class="next"><span class="page_live">下一页</span></li>';
            else $html += '<li class="next"><span>下一页</span></li>';

            //$html += '<li class="next"><span class="page_live">下一页</span></li>';
            $html += '<li class="next"> 5条/页 共 '+m.pageData+'条</li>';
            $("#pageC").html($html);
        }

点击上一页 下一页 以及数字  代码

  //分页 边框 样式
        function binPage() {
            /*
            $(".page_live").hover(
            function () { $(this).css({ "border": "1px solid #FE7002", "color": "#FF6600" }); },
            function () { $(this).css({ "border": "", "color": "" }); });
            */

            $(".page_live").live({
                mouseenter: function () { if ($(this).hasClass("page_live")) { $(this).css({ "border": "1px solid #FE7002", "color": "#FF6600" }); } },  //鼠标进入
                mouseleave: function () { $(this).css({ "border": "", "color": "" }); },  //鼠标离开
                click: function () {  //鼠标单击
                    //var pageIndex = $.trim($(this).text());
                    var pageText = $.trim($(this).text());
                    //m.pageIndex = $(this).parent().index(); //获取li的index 即页码值 pageIndex

                    //$("#pageC li:not(:last)").each(function () { $(this).find("span").attr("d", "90"); });
                    //m.pageIndex = $.trim($("#pageC span[class=page_active]").text());
                    switch (pageText) {
                        case "上一页":
                            $(".pagemb8 li").last().find("span").addClass("page_live");  //启用'下一页'可单击
                            $("#pageC span[class=page_active]").attr("class", "page_live").parent().prev().find("span[name!=pa]").attr("class", "page_active").css({ "border": "", "color": "" });
                            if ($.trim($("#pageC span[class=page_active]").text()) == "1") //判断是否是第一页
                                $(".pagemb8 li").first().find("span").removeClass("page_live").css({ "border": "", "color": "" }); //已经是最后一页。则不能在单击
                            break;
                        case "下一页":
                            //判断是否是最后一页
                            $(".pagemb8 li:eq(0)").find("span").addClass("page_live");
                            $("#pageC span[class=page_active]").attr("class", "page_live").parent().next().find("span[name!=pa]").attr("class", "page_active");
                            if ($.trim($("#pageC span[class=page_active]").text()) == m.pageCount)
                                $(".pagemb8 li").last().find("span").removeClass("page_live").css({ "border": "", "color": "" }); //已经是最后一页。则不能在单击
                            m.pageIndex = m.pageIndex + 1;
                            break;
                        default:
                            $("#pageC li").find("span[name!=pa]").attr("class", "page_live");
                            $(this).attr("class", "page_active").css({ "border": "", "color": "" });
                            if (pageText == "1")
                                $(".pagemb8 li:eq(0)").find("span").removeClass("page_live"); //已经是第一页。则不能在单击
                            else if (pageText == m.pageCount) {
                                $(".pagemb8 li").last().find("span").removeClass("page_live"); //已经是最后一页。则不能在单击
                            }
                            break;

                    }
                    m.pageIndex = $.trim($("#pageC span[class=page_active]").text()); //保存页码

                    //当达到六页时,开始显示省略号
                    //                    if (m.pageIndex == 6) {
                    //                        if ($("#slh").length == 0)
                    //                            $("#pageC li:eq(2)").before("<li id='slh'><span style='border:none;' name='pa'>...</span></li>");
                    //                    }
                    //else if(m.pageIndex
                    //ckPage(m.pageIndex);
                    createPageBar(m.pageIndex, m.pageCount);
                    var t = $.trim($(".shuru").val());
                    var data = getData();
                    PageClick(m.pageIndex, 1, data); //开始加载数据

                    //PageClick(m.pageIndex, 0, t); //开始加载数据
                }
            });
        }


结果。如图

原文地址:https://www.cnblogs.com/nsky/p/3251640.html