zoukankan      html  css  js  c++  java
  • MVC 表格数据静态分页

    在没有上代码之前先看下效果图吧:

    本分页功能主要是实现了:通过Jquery ajax 静态分页

    要建立一个分页类,实现分页控件的显示,注意该类应该放在包 namespace System.Web.Mvc 下

    由于我用的是mvc 3 所以在分页类方法调用时返回的是MvcHtmlString 这个在mvc 2 下也是同样支持的

    看下分页类的代码吧:

     /// <summary>
            /// 分页插件
            /// </summary>
            /// <param name="helper"></param>
            /// <param name="urlPrefix">页面内容连接地址</param>
            /// <param name="divId">内容加载容器</param>
            /// <param name="FindValue">查找内容 </param>
            /// <param name="SortCell">排序字段</param>
            /// <param name="OrderType">排序类型(ASC 或 DESC) 默认 DESC</param>
            /// <param name="totalRecords">总页数</param>
            /// <param name="currentPage">当前页</param>
            /// <param name="currentPageSize">每页显示条数</param>
            /// <returns></returns>
            public static MvcHtmlString Pager(this HtmlHelper helper, string urlPrefix, string divId, string FindValue, string SortCell, string OrderType, int totalRecords, int? currentPage = 1, int? currentPageSize = 20)
            {
                StringBuilder sb1 = new StringBuilder();
                int pageIndex = 0;
                int pageSize = 0;
                pageIndex = int.Parse(currentPage.ToString());
                pageSize = int.Parse(currentPageSize.ToString());
    
                int pageNumber = 10;
                int seed = pageIndex % pageNumber == 0 ? (pageIndex - pageNumber) : pageIndex - (pageIndex % pageNumber);
    
                int AllPage = (totalRecords + pageSize - 1) / pageSize;
    
                urlPrefix = urlPrefix.TrimStart('/');
                urlPrefix = "/" + urlPrefix;
    
                if (string.IsNullOrWhiteSpace(OrderType))
                {
                    OrderType = "DESC";
                }
    
                if (pageIndex > pageNumber)
                    sb1.AppendLine(String.Format("<a href='#' onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >首页</a>", divId, 1, pageSize, urlPrefix, SortCell, OrderType, FindValue));
    
                if (pageIndex > 0)
                {
                    int page = pageIndex - 1;
                    if (page > 0)
                    {
                        sb1.AppendLine(String.Format("<a href='#' onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >上一页</a>", divId, page, pageSize, urlPrefix, SortCell, OrderType, FindValue));
                    }
                }
    
                if (pageIndex - 10 > 0)
                {
                    sb1.AppendLine(String.Format("<a href='#' onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >...</a>", divId, (pageIndex - pageNumber) + 1, pageSize, urlPrefix, SortCell, OrderType, FindValue));
                }
    
                for (int i = seed; i < AllPage && i < seed + pageNumber; i++)
                {
                    int page = i + 1;
                    if (pageIndex == page)
                    {
                        sb1.AppendLine("<span class=\"current\">" + page + "</span>");
                    }
                    else
                    {
                        sb1.AppendLine(String.Format("<a href='#' onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >{1}</a>", divId, page, pageSize, urlPrefix, SortCell, OrderType, FindValue));
                    }
                }
    
                if (pageIndex + 10 <= AllPage - 1)
                {
                    sb1.AppendLine(String.Format("<a href='#' onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >...</a>", divId, (pageIndex + pageNumber), pageSize, urlPrefix, SortCell, OrderType, FindValue));
                }
    
                if (pageIndex < AllPage - 1)
                {
                    sb1.AppendLine(String.Format("<a href='#'  onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >下一页</a>", divId, pageIndex + 1, pageSize, urlPrefix, SortCell, OrderType, FindValue));
                }
                if (AllPage > pageNumber && pageIndex < AllPage)
                {
                    sb1.AppendLine(String.Format("<a href='#' onclick=GetPagingParam(\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\") >尾页</a>", divId, AllPage, pageSize, urlPrefix, SortCell, OrderType, FindValue));
                }
    
                return new MvcHtmlString(sb1.ToString());
            }

    记得该类是放在 namespace System.Web.Mvc

    namespace System.Web.Mvc
    {

    public static class PagerHelper
        {

    //加上以上代码 就是一个分页类了
          }

       }  

    分页类创建完成之后就是调用使用了,其实很简单通过js

    //divId 容器ID, pageIndex 当前第几页, pageSize每页大小,urlPrefix 页面连接地址,SortCell 排序字段,OrderType 排序类型 FindValue 查找内容
    function GetPagingParam(divId, pageIndex, pageSize, urlPrefix, SortCell, OrderType, searchValue) {
        if (searchValue == undefined) {
            searchValue = "";
        }
        var urls = urlPrefix + "?FindValue=" + searchValue + "&pageIndex=" + pageIndex + "&pageSize=" + pageSize + "&SortCell=" + SortCell + "&OrderType=" + OrderType;
        var targetDiv = "#" + divId;
        $.ajax({
            url: urls,
            async: false,
            success: function (rs) {
                $(targetDiv).html(rs);
            },
            error: function (er) {
                alert("分页数据加载出错");
            }
        });
    }

    参数大家可以根据自己的需要去扩展

    view 使用则需要两个view 一个是主要的容器view 一个则是数据view

    主容器view 调用 数据view

     <div id="IndexDiv" style=" 100%">
            @{
                Html.RenderAction("IndexList");
            }
        </div>

     数据view 调用自定义分页控件

    <div class="digg">
        @Html.Pager("/Admin/IndexList", "IndexDiv", "", SortCell, OrderType, Total, pageIndex, pageSize)
    </div>

    这边的 class="digg" 是分页控件的样式,选中样式(即当前页)为span 下的 current

    按照以上方法就可以实现一个静态分页了,而且是自己写的静态分页哦!!!!

    如果大家没有什么好的分页方法介绍大家使用下:sp_cursoropen

    具体如下:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     create procedure [dbo].[PageDataSet]       
        @sql nvarchar(4000), --要执行的sql语句    
        @currentpage int=2, --要显示的页码    
        @pagesize int=10, --每页的大小    
        @recordcount int=0 out, --记录数    
        @pagecount int=0 out --总页数    
        as    
        set nocount on    
        declare @p1 int    
         
        exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output    
         
        select @recordcount=@pagecount,@pagecount=ceiling(1.0*@pagecount/@pagesize)        
        ,@currentpage=(@currentpage-1)*@pagesize+1        
        select @recordcount recordcount ,@pagecount     pagecount,@currentpage     currentpage    
        exec sp_cursorfetch @p1,16,@currentpage,@pagesize        
        exec sp_cursorclose @p1    
    

     这个分页方法可以返回 总记录数, 页数,

     转载请注明出处

  • 相关阅读:
    Debugging Auto Layout:Ambiguous Layouts
    Debugging Auto Layout:Unsatisfiable Layouts
    Debugging Auto Layout
    Auto Layout Cookbook:Views with Intrinsic Content Size
    编译地址与运行地址
    Memory Controller
    ARM寄存器
    C++指针悬挂(赋值运算符重载)
    多态性,友元与静态成员 基础知识小结
    ARM 汇编指令集
  • 原文地址:https://www.cnblogs.com/itclw/p/2534371.html
Copyright © 2011-2022 走看看