zoukankan      html  css  js  c++  java
  • asp.net mvc 无刷新高效分页

    分页的原理是将本页的数据通过查询拿出来,当数据很巨大时,不用全部拿出来,影响效率。

    第一步拿数据:

    sql server下的分页查询:

    select * from  (select *,Row_Number() over(order by id)  nums from tableName) tableName where  nums > 2 and nums < 10

    检索 2-10的数据,这里必须用到子查询。因为设置 nums的条件时,nums必须为表里有的字段。

    mysql下的分页查询:

    SELECT *  FROM USER LIMIT 2,5

    检索从3开始的5条数据,比起ms sql简单了点

    接下来需要封装一个分页类,将分页用到的数据封装进去。封装的数据有要显示的多条数据,所以这个类就继承List<T>

      public class PageinatedList<T> : List<T>
        {
            private int pageIndex;
            private int pageSize;
            private int totalCount;
            private int totalPages;
    
    
            /// <summary>
            /// 当前页码
            /// </summary>
            public int PageIndex
            {
                set { pageIndex = value; }
                get { return pageIndex; }
            }
    
            /// <summary>
            /// 每页个数
            /// </summary>
            public int PageSize
            {
                set { pageSize = value; }
                get { return pageSize; }
            }
            /// <summary>
            /// 数据总数
            /// </summary>
            public int TotalCount
            {
                set { totalCount = value; }
                get { return totalCount; }
            }
            /// <summary>
            /// 可分页数
            /// </summary>
            public int TotalPages
            {
                set { totalPages = value; }
                get { return totalPages; }
            }
    
            public PageinatedList(IQueryable<T> table, int pageIndex, int pageSize)
            {
                this.PageIndex = pageIndex;
                this.PageSize = pageSize;
                this.TotalCount = table.Count();
                this.TotalPages = TotalCount / PageSize;
                this.AddRange(table.Skip(pageIndex*PageSize).Take(PageSize));
    
            }
        }

    这里我用到的是linq查询,linq查询返回的是一个 IQueryable<T> 接口 下的一个子类。所以我这里构造函数就传进去一个IQueryable<T> table

    用linq查询出来,然后封装进分页类。返回给页面。这样就能拿到数据和分页用到的属性

            public ActionResult Index()
            {
                var select = from c in ent.学生 orderby c.学号 select c;
                var pageinated = new PageinatedList<学生>(select,0,10);
                return View(pageinated);
            }
    
            public ActionResult Pages(int page)
            {
                var select = from c in ent.学生 orderby c.学号 select c;
                var pageinated = new PageinatedList<学生>(select, page, 10);
                return View(pageinated);
            }
     function changePage(i) {
            $.post("Pages?Page=" + i, function (data) {
                $("#mytr").html(data);
            });
        }

    通过ajax来改变数据。

  • 相关阅读:
    maven junit.framework不存在问题解决
    maven项目在打war包时出现非法字符: 'ufeff' 解决方案
    如何隐藏tomcat命令窗口
    小程序如何生成开发版的带参二维码
    小程序码生成随记
    生活中的一些笔记
    存储过程
    项目出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法
    maven环境配置详解,及maven项目的搭建及maven项目聚合
    sqldeveloper和plsqldebeloper
  • 原文地址:https://www.cnblogs.com/sjyzz/p/7884078.html
Copyright © 2011-2022 走看看