前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分页方法总结

分页方法总结

作者头像
wfaceboss
发布2019-04-08 11:39:49
4380
发布2019-04-08 11:39:49
举报
文章被收录于专栏:wfacebosswfaceboss

在同一个命名空间下:

1.定义接口

代码语言:javascript
复制
public interface IPagedList<T> : IList<T>
    {
        int PageIndex { get; }
        int PageSize { get; }
        int TotalCount { get; }
        int TotalPages { get; }
        bool HasPreviousPage { get; }
        bool HasNextPage { get; }
}

注意:IList<T>  继承了ICollection<T>, IEnumerable<T>, Ienumerable

2.实现接口:

代码语言:javascript
复制
  [Serializable]//讲当前类的实例序列化,便于网络中传输和保存
    public class PagedList<T> : List<T>, IPagedList<T> 
    {
        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="source">source</param>
        /// <param name="pageIndex">Page index</param>
        /// <param name="pageSize">Page size</param>
        public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
        {
            int total = source.Count();
            this.TotalCount = total;
            this.TotalPages = total / pageSize;

            if (total % pageSize > 0)
                TotalPages++;

            this.PageSize = pageSize;
            this.PageIndex = pageIndex;
            this.AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());
        }

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="source">source</param>
        /// <param name="pageIndex">Page index</param>
        /// <param name="pageSize">Page size</param>
        public PagedList(IList<T> source, int pageIndex, int pageSize)
        {
            TotalCount = source.Count();
            TotalPages = TotalCount / pageSize;

            if (TotalCount % pageSize > 0)
                TotalPages++;

            this.PageSize = pageSize;
            this.PageIndex = pageIndex;
            this.AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());
        }

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="source">source</param>
        /// <param name="pageIndex">Page index</param>
        /// <param name="pageSize">Page size</param>
        /// <param name="totalCount">Total count</param>
        public PagedList(IEnumerable<T> source, int pageIndex, int pageSize, int totalCount)
        {
            TotalCount = totalCount;
            TotalPages = TotalCount / pageSize;

            if (TotalCount % pageSize > 0)
                TotalPages++;

            this.PageSize = pageSize;
            this.PageIndex = pageIndex;
            this.AddRange(source);
        }

        public int PageIndex { get; private set; }
        public int PageSize { get; private set; }
        public int TotalCount { get; private set; }
        public int TotalPages { get; private set; }

        public bool HasPreviousPage
        {
            get { return (PageIndex > 0); }
        }
        public bool HasNextPage
        {
            get { return (PageIndex + 1 < TotalPages); }
        }
    }

3.功能的实现(控制器中)

代码语言:javascript
复制
    
从数据源(数据库)查询数据 为Hus
var aHus = new PagedList<Entity>(Hus, command.Page - 1, command.PageSize);// Entity:需要分页的实体, Hus:查询后的总数据    

            var gridModel = new DataSourceResult
            {
                Data = aHus.Select(x =>
                {
                   // var m = x.ToModel();
                 var m=new EntityModel(); // EntityModel界面model
                    赋值。。。。
                    return m;
                }),
                Total = aHus.TotalCount
            };
            return Json(gridModel);

可简写为:

代码语言:javascript
复制
var gridModel = new DataSourceResult
            {
                Data = new PagedList<Entity>(Hus, command.Page - 1, command.PageSize).Select(x =>
                {
                    //var m = x.ToModel();
                 var m=new EntityModel(); // EntityModel界面model
                    赋值。。。。
                    return m;
                }),
                Total = aHus.TotalCount
            };
            return Json(gridModel);

注意:DataSourceResult类为 (功能为装数据)

代码语言:javascript
复制
public class DataSourceResult
    {
 
        public IEnumerable Data { get; set; }

        public int Total { get; set; }
    }

4.前端代码(省去)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档