您的位置:首页 > 其它

自定义分页控件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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: