自定义分页控件PageList
2016-10-24 23:54
295 查看
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 7 namespace Commons 8 { 9 public class PageList<T> : IEnumerable<T> 10 { 11 private int pageIndex; 12 private int pageSize; 13 private int totalPage; 14 private int totalCount; 15 16 private IList<T> list; 17 18 /// <summary> 19 /// 单页数据,总条数,计算出总页数,然后封装成分页对象 20 /// </summary> 21 /// <param name="list"></param> 22 /// <param name="pageIndex"></param> 23 /// <param name="pageSize"></param> 24 /// <param name="totalCount"></param> 25 public PageList(IList<T> list, int pageIndex, int pageSize, int totalCount) 26 { 27 if (list != null) 28 { 29 this.pageIndex = pageIndex; 30 this.pageSize = pageSize; 31 this.totalCount = totalCount; 32 this.totalPage = totalCount / pageSize; 33 if (totalCount % pageSize > 0) this.totalPage += 1; 34 35 this.list = list; 36 } 37 else 38 { 39 this.list = new List<T>(); 40 } 41 } 42 /// <summary> 43 /// 全部数据,筛选出当页数据且计算出总条数和总页数,然后封装成分页对象 44 /// </summary> 45 /// <param name="list"></param> 46 /// <param name="pageIndex"></param> 47 /// <param name="pageSize"></param> 48 public PageList(IList<T> list, int pageIndex, int pageSize) 49 { 50 if (list != null) 51 { 52 this.pageIndex = pageIndex; 53 this.pageSize = pageSize; 54 this.totalCount = list.Count; 55 this.totalPage = list.Count / pageSize; 56 if (list.Count % pageSize > 0) this.totalPage += 1; 57 58 this.list = list.Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList(); 59 } 60 else 61 { 62 this.list = new List<T>(); 63 } 64 } 65 public int PageIndex { get { return this.pageIndex; } } 66 public int PageSize { get { return this.pageSize; } } 67 public int TotalPage { get { return this.totalPage; } } 68 public int TotalCount { get { return this.totalCount; } } 69 70 public IEnumerator<T> GetEnumerator() 71 { 72 foreach (var item in this.list) 73 { 74 yield return item; 75 } 76 } 77 78 IEnumerator IEnumerable.GetEnumerator() 79 { 80 throw new NotImplementedException(); 81 } 82 83 public IHtmlString PageBar(string url, object property) 84 { 85 if (string.IsNullOrEmpty(url)) url = string.Empty; 86 else 87 { 88 url = url.Trim().TrimEnd('?', '&'); 89 if (url.Contains("?")) url += "&"; 90 else url += "?"; 91 } 92 string html = "<ul class=\"pagination\">{0}</ul>"; 93 int pageMin = 1, pageMax = this.TotalPage; 94 string page = string.Empty; 95 for (int i = this.PageIndex - 1; (i > (this.PageIndex - 5)) && i > 0; i--) 96 { 97 string pageUrl = string.Format("{0}pageIndex={1}", url, i); 98 page = "<li><a href=\"" + pageUrl + "\">" + i + "</a></li>" + page; 99 pageMin = i; 100 } 101 page = page + "<li class=\"active\"><a href=\"#\">" + this.pageIndex + "</a></li>"; 102 for (int i = this.PageIndex + 1; (i < (this.PageIndex + 5)) && i < this.TotalPage + 1; i++) 103 { 104 string pageUrl = string.Format("{0}pageIndex={1}", url, i); 105 page = page + "<li><a href=\"" + pageUrl + "\">" + i + "</a></li>"; 106 pageMax = i; 107 } 108 //第一页和最后一页 109 if (pageMin > 1) 110 { 111 if ((pageMin - 1) > 1) 112 page = "<li><a>...</a></li>" + page; 113 string pageUrl = string.Format("{0}pageIndex={1}", url, 1); 114 page = "<li><a href=\"" + pageUrl + "\">" + 1 + "</a></li>" + page; 115 } 116 if (pageMax < this.TotalPage) 117 { 118 if ((this.TotalPage - pageMax) > 1) 119 page = page + "<li><a>...</a></li>"; 120 string pageUrl = string.Format("{0}pageIndex={1}", url, this.TotalPage); 121 page = page + "<li><a href=\"" + pageUrl + "\">" + this.TotalPage + "</a></li>"; 122 } 123 //上一页和下一页 124 if (this.pageIndex == 1) 125 page = "<li class=\"prev disabled\"><a href=\"#\"><span class=\"fa fa-angle-left\"></span> 上一页</a></li>" + page; 126 else 127 page = "<li class=\"prev\"><a href=\"" + string.Format("{0}pageIndex={1}", url, this.pageIndex - 1) + "\"><span class=\"fa fa-angle-left\"></span> 上一页</a></li>" + page; 128 if (this.pageIndex == this.TotalPage) 129 page = page + "<li class=\"next disabled\"><a href=\"#\">下一页 <span class=\"fa fa-angle-right\"></span></a></li>"; 130 else 131 page = page + "<li class=\"next\"><a href=\"" + string.Format("{0}pageIndex={1}", url, this.pageIndex + 1) + "\">下一页 <span class=\"fa fa-angle-right\"></span></a></li>"; 132 html = string.Format(html, page); 133 return new HtmlString(html); 134 } 135 } 136 }
相关文章推荐
- 自定义list分页控件(lwuit)
- Sharepoint list 自定义分页与GotoPage solution
- gPatNet.PageList分页控件与AspNetPager分页控件的功能差别
- 修改DeDe标签Pagelist分页样式,自定义分页样式
- 网上购物系统(Task007)——自定义DateList控件分页显示商品信息
- 修改DeDe标签Pagelist分页样式,自定义分页样式
- 网上购物系统(Task007)——自定义DateList控件分页显示商品信息
- Asp.NET MVC X.PageList.MVC 分页详解以及自定义样式
- 自己开发的自定义分页控件
- 在自定义WebUserControl中访问PAGE/master/或其它控件中的对象
- 使用 ASP.NET Atlas PageNavigator控件实现客户端分页导航
- 扩展GridView控件(10) - 自定义分页样式
- GridView控件自定义分页详解
- 可配置的自定义分页控件
- 扩展GridView控件(10) - 自定义分页样式
- [导入]在自定义WebUserControl中访问PAGE/master/或其它控件中的对象
- 一步一步学习ObjectDataSource控件--自定义分页排序
- GridView控件自定义分页详解
- 一步一步学习ObjectDataSource控件--自定义分页排序
- 一个简单的分页控件,用来自定义分页用的