using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;

 namespace Commons
 {
     public class PageList<T> : IEnumerable<T>
     {
         private int pageIndex;
         private int pageSize;
         private int totalPage;
         private int totalCount;

         private IList<T> list;

         /// <summary>
         /// 单页数据,总条数,计算出总页数,然后封装成分页对象
         /// </summary>
         /// <param name="list"></param>
         /// <param name="pageIndex"></param>
         /// <param name="pageSize"></param>
         /// <param name="totalCount"></param>
         public PageList(IList<T> list, int pageIndex, int pageSize, int totalCount)
         {
             if (list != null)
             {
                 this.pageIndex = pageIndex;
                 this.pageSize = pageSize;
                 this.totalCount = totalCount;
                 this.totalPage = totalCount / pageSize;
                 ) ;

                 this.list = list;
             }
             else
             {
                 this.list = new List<T>();
             }
         }
         /// <summary>
         /// 全部数据,筛选出当页数据且计算出总条数和总页数,然后封装成分页对象
         /// </summary>
         /// <param name="list"></param>
         /// <param name="pageIndex"></param>
         /// <param name="pageSize"></param>
         public PageList(IList<T> list, int pageIndex, int pageSize)
         {
             if (list != null)
             {
                 this.pageIndex = pageIndex;
                 this.pageSize = pageSize;
                 this.totalCount = list.Count;
                 this.totalPage = list.Count / pageSize;
                 ) ;

                 )).Take(pageSize).ToList();
             }
             else
             {
                 this.list = new List<T>();
             }
         }
         public int PageIndex { get { return this.pageIndex; } }
         public int PageSize { get { return this.pageSize; } }
         public int TotalPage { get { return this.totalPage; } }
         public int TotalCount { get { return this.totalCount; } }

         public IEnumerator<T> GetEnumerator()
         {
             foreach (var item in this.list)
             {
                 yield return item;
             }
         }

         IEnumerator IEnumerable.GetEnumerator()
         {
             throw new NotImplementedException();
         }

         public IHtmlString PageBar(string url, object property)
         {
             if (string.IsNullOrEmpty(url)) url = string.Empty;
             else
             {
                 url = url.Trim().TrimEnd('?', '&');
                 if (url.Contains("?")) url += "&";
                 else url += "?";
             }
             string html = "<ul class=\"pagination\">{0}</ul>";
             , pageMax = this.TotalPage;
             string page = string.Empty;
             ; (i > ()) && i > ; i--)
             {
                 string pageUrl = string.Format("{0}pageIndex={1}", url, i);
                 page = "<li><a href=\"" + pageUrl + "\">" + i + "</a></li>" + page;
                 pageMin = i;
             }
             page = page + "<li class=\"active\"><a href=\"#\">" + this.pageIndex + "</a></li>";
             ; (i < ()) && i < ; i++)
             {
                 string pageUrl = string.Format("{0}pageIndex={1}", url, i);
                 page = page + "<li><a href=\"" + pageUrl + "\">" + i + "</a></li>";
                 pageMax = i;
             }
             //第一页和最后一页
             )
             {
                 ) > )
                     page = "<li><a>...</a></li>" + page;
                 );
                 page =  + "</a></li>" + page;
             }
             if (pageMax < this.TotalPage)
             {
                 )
                     page = page + "<li><a>...</a></li>";
                 string pageUrl = string.Format("{0}pageIndex={1}", url, this.TotalPage);
                 page = page + "<li><a href=\"" + pageUrl + "\">" + this.TotalPage + "</a></li>";
             }
             //上一页和下一页
             )
                 page = "<li class=\"prev disabled\"><a href=\"#\"><span class=\"fa fa-angle-left\"></span>&nbsp;上一页</a></li>" + page;
             else
                 page = ) + "\"><span class=\"fa fa-angle-left\"></span>&nbsp;上一页</a></li>" + page;
             if (this.pageIndex == this.TotalPage)
                 page = page + "<li class=\"next disabled\"><a href=\"#\">下一页&nbsp;<span class=\"fa fa-angle-right\"></span></a></li>";
             else
                 page = page + ) + "\">下一页&nbsp;<span class=\"fa fa-angle-right\"></span></a></li>";
             html = string.Format(html, page);
             return new HtmlString(html);
         }
     }
 }

自定义分页控件PageList的更多相关文章

  1. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  2. C# DataGridView自定义分页控件

    好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...

  3. Mvc自定义分页控件

    MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...

  4. WPF自定义分页控件,样式自定义,简单易用

    WPF自定义分页控件 做了许久伸手党,终于有机会贡献一波,搜索一下WPF分页控件,还是多,但是不太通用,主要就是样式问题,这个WPF很好解决,还有一个就是分页控件嘛,只关心几个数字的变动就行了,把页码 ...

  5. 自定义分页控件-基于Zhifeiya的分页控件改版

    基于Zhifeiya的分页控件改版的分页. html显示代码: <div class="pagelist"> {{.pagerHtml}} </div> c ...

  6. Winform自定义分页控件的实现

    实现效果 有点丑陋 但是功能是没问题的 测试过 实现思路 先创建一个用户控件 代码实现 public partial class PagerControl : UserControl { ; /// ...

  7. winform 自定义分页控件 及DataGridview数据绑定

    分页效果如上图所示,用到的控件均为基本控件 ,其方法如下 右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text 用户控件全部代码: using Syst ...

  8. WPF管理系统自定义分页控件 - WPF特工队内部资料

    最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...

  9. WPF 自定义分页控件二

    一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...

随机推荐

  1. 图片拾取器-PicPicker

    最近报名参加了360前端星计划,想当一名前端实习生,学习更多更流行的前端知识.然后需要完成一个作业,才能进培训,进了培训还得看运气才能留下,流程不少.书归正传,请看: 课后作业题目 请从下面两个题目中 ...

  2. 从Knockout到Angular的架构演变

    2008年第一次在WPF中使用MVVM模式之后,就一直热衷于耦合隔离.模块化与重构.UI和逻辑分离.单元测试以及后面的领域模型.谈及MVVM模式,自己也开发过一套框架,但没有长期更新和维护,所以索性就 ...

  3. 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型

    不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...

  4. C#设计模式-享元模式

    在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然 ...

  5. Android笔记——关于Cursor类的介绍

    使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解. 关于 Cursor 在你理解和使用 Android Cursor 的时候你 ...

  6. rabbitMQ第五篇:Spring集成RabbitMQ

    前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...

  7. 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)

    EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...

  8. c++头文件 #include<iostream>

    cout<<"C1="<<setiosflags(ios::fixed)<<setprecision(2)<<3.14*r*2< ...

  9. 【ssh信任关系】解决信任关系不生效问题

    配置的时候遇见点问题,发现即便将id_rsa.pub拷贝到了另一台机器上,信任也没有建立起来. 原因是另外一台机器上目录权限不对,可以通过su root后观察/var/log/message里的日志信 ...

  10. Security7:View Usage

    一,在Database level上,主要有 sys.database_principals, sys.database_permissions 和 sys.database_role_members ...