zoukankan      html  css  js  c++  java
  • C# MVC+NHibernate 分页

    一、页面代码,分为三部分,一是查询条件部分,二是数据部分,二是页码条

         <div id="ticketoutquery">
                <table>
                    <tr>
                        <td style=" 70px; text-align: right">
                            订票单号:
                        </td>
                        <td style="text-align: left">
                            @Html.TextBoxFor(s => s.TicketNo)
                        </td>
                      
                        <td style=" 70px; text-align: right">
                            出票时间:
                        </td>
                        <td>
                            @Html.TextBoxFor(s => s.CreateDateStart, new { @class = "datepicker" })
                        </td>
                        <td>
                            @Html.TextBoxFor(s => s.CreateDateEnd, new { @class = "datepicker" })
                        </td>
                        <td style=" 70px; text-align: right">
                            <input type="button" id="tbQueryticketout" onclick="doQueryticketoutProcessing(1)" class="btn btn-primary"
                                   value="查询" />
                        </td>
                    </tr>
                </table>
            </div>
        <div id="TaskList">
            @Html.Raw(@ViewData["TaskLists"])
        </div>
        
        <div class="page_nav" id="pageBar" style="margin:0,auto">
            @Html.Raw(OilDigital.TicketSys2.Web.PageBarHelper.GetPagaBar((int)ViewData["PageIndex"], (int)ViewData["PageCount"], (int)ViewData["recoredCount"]))
        </div>

    二、页面条码类封装如下:

     public class PageBarHelper
        {
            public static string GetPagaBar(int pageIndex, int pageCount, int recoredCount)
            {
                if (pageCount == 1)
                {
                    return string.Empty;
                }
                int start = pageIndex - 5;//计算起始位置.要求页面上显示10个数字页码.
                if (start < 1)
                {
                    start = 1;
                }
                int end = start + 9;//计算终止位置.
                if (end > pageCount)
                {
                    end = pageCount;
                    //重新计算一下Start值.
                    start = end - 9 < 1 ? 1 : end - 9;
                }
                StringBuilder sb = new StringBuilder();
                if (pageIndex > 1)
                {
                    //sb.AppendFormat("<a href='NewList.aspx?pageIndex={0}'>上一页</a>", pageIndex - 1);、
                    sb.AppendFormat("<a href='#'  onclick='doQueryticketoutProcessing({0})'>上一页</a>", pageIndex - 1);
                }
                for (int i = start; i <= end; i++)
                {
                    if (i == pageIndex)
                    {
                        sb.Append(i);
                    }
                    else
                    {
                        sb.AppendFormat("<a href='#'  onclick='doQueryticketoutProcessing({0})'>{0}</a>", i);
                    }
                }
                if (pageIndex < pageCount)
                {
                    sb.AppendFormat("<a href='#'  onclick='doQueryticketoutProcessing({0})'>下一页</a>", pageIndex + 1);
                }
                if (recoredCount >0)
                {
                    sb.AppendFormat(" <span>每页10条,共{0}条</span>", recoredCount);
                }
                return sb.ToString();
            }
        }

    三、点击查询后会触发doQueryticketoutProcessing方法

    function doQueryticketoutProcessing(pageIndex) {
        var ticketNoval = $('#TicketNo').val();  //订票单号
        var CreateDateStart = $('#CreateDateStart').val();   //出票时间
        var CreateDateEnd = $('#CreateDateEnd').val();   //出票时间
        if (pageIndex == null || pageIndex == undefined || pageIndex <1)
        {
            pageIndex = 1;
        }
        var type = $("#type").val();
        showMsg();
        $.ajax({
        type: "post",
                url: approvalUrl + "/GetProcessingTicketoutTaskListByQuery",
                data: { ReceiveNumber: ticketNoval, createDateStart: CreateDateStart, createDateEnd: CreateDateEnd, type: type, pageIndex: pageIndex },
                            datatype: "html",
                success: function (data) {
                    hideMsg();
                    if (data.ticketList == "") {
                    $("#taskList").html("<h5>暂时无任务列表!</h5>");
                    } else {
                    $("#TaskList").empty();
                    $("#TaskList").html(data.ticketList);
                }
                $("#pageBar").html(data.pageBar);
                },
                error: function (req, status, error) {
                    hideMsg();
                            console.log("获取订票单失败,原因如下:
    " + error);
                            }
                            });
                            }

    三、后台除了查询的条件外,分页的参数主要是pageIndex 和 pageSize.   传入后台后返回总记录数 recoredCount   和 总页数pageCount   下面给出分页的核心代码

    public static IQueryable<Ticket> GetByStateAndDateTime(string ReceiveNumber, string ticketState, DateTime startDate, DateTime endDate,int pageIndex,int pageSize)
            {
                IQueryable<Ticket> tickets = dao.GetQueryable().Where(s => s.StateCode == "已出票" && s.CreatedTime > startDate && s.CreatedTime < endDate);
                if (!string.IsNullOrEmpty(ReceiveNumber))
                {
                    tickets = tickets.Where(s => s.ReceiveNumber == ReceiveNumber.Trim());
                }
                if(pageIndex!=0)
                {
                    tickets = tickets.OrderBy(s=>s.CreatedTime).Skip((pageIndex - 1) * pageSize).Take(pageSize);
                }
                return tickets;
    
            }
    pageCount计算方法
    pageCount = Convert.ToInt32(Math.Ceiling((double)recoredCount / pageSize));

    四、分页控件的css样式如下:

    page_nav{clear:both; padding:15px 0; color:#666; font:normal 12px/24px Arial; text-align:center;}
    .page_nav a{display:inline-block; height:22px; margin:0 2px; padding:0 8px; text-decoration:none; border:solid 1px #dbe5ee; -moz-border-radius:2px; -webkit-border-radius:2px; -khtml-border-radius:2px; border-radius:2px; background:#fff; color:#333; font:normal 12px/22px Arial, Helvetica, sans-serif; cursor:pointer;}
    .page_nav strong{display:inline-block; height:24px; margin:0 3px; padding:0 8px; border:none; -moz-border-radius:2px; -webkit-border-radius:2px; -khtml-border-radius:2px; border-radius:2px; background:#C00; color:#fff; font-weight:normal; line-height:24px; text-decoration:none;}
    .page_nav a:hover,
    .page_nav a.on{height:24px; margin:0 3px; border:none; background:#C00; color:#fff; line-height:24px; text-decoration:none;}
    .page_nav a.select{cursor:default;}
    .page_nav .view_all{display:block; text-align:center;}
    .page_nav .view_all a{height:auto; margin:0; padding:0; border:none; color:#06c; line-height:24px;}
    .page_nav .view_all a:hover{height:auto; margin:0; padding:0; background:none;}

    注意事项:

          必须配置nhibernate如下:有些是.MsSql2000Dialect 在使用分页的方法时是会报错的。

                <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>

  • 相关阅读:
    一些 好的链接
    图像滤波算法
    minigui中使用ttf字体库流程
    国庆长假归来
    vs2015 快捷键
    R11 u盘不能自动识别
    qt 自定义折线图
    qt QThread
    qt动态库编译和链接
    scons 库文件生成和链接
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/14237005.html
Copyright © 2011-2022 走看看