1 using System;
2 using System.Web;
3 using System.Web.UI;
4 using System.Web.UI.WebControls;
5 using System.Web.UI.HtmlControls;
6 using System.Text.RegularExpressions;
7
8
9 namespace MyWebControl
10 {
11 /// <summary>
12 /// 分页控件 Author:ahui 2006-02-16
13 /// </summary>
14 public class Pager : WebControl, INamingContainer
15 {
16 #region 成员字段
17 private static readonly string pageSizeKey = "__PAGER__PAGESIZE";
18 private static readonly string recordCountKey = "__PAGER__RECORDCOUNT";
19 private string linkColor = "#2C78C5";
20 private int pageIndex = -1;
21 private int pageSize = -1;
22 private int recordCount = -1;
23 #endregion
24
25 #region 属性字段
26 /// <summary>
27 /// 当前页索引,如果其值过大,则显示最后一页
28 /// </summary>
29 public int PageIndex
30 {
31 get
32 {
33 if(pageIndex < 0)
34 {
35 string page = Page.Request.QueryString["PageIndex"];
36 if(page != null)
37 {
38 try
39 {
40 pageIndex = int.Parse(page.Trim()) - 1;
41 }
42 catch{}
43 }
44 if(pageIndex < 0)pageIndex = 0;
45 }
46
47 int i = 0;
48 int pages = CalculateTotalPages();
49 if(pageIndex > pages - 1)
50 {
51 i = pages - 1;
52 }
53 else
54 {
55 i = pageIndex;
56 }
57 return i;
58 }
59 }
60
61 /// <summary>
62 /// 每页显示多少条记录
63 /// </summary>
64 public int PageSize
65 {
66 get
67 {
68 if(pageSize > 0)
69 {
70 return pageSize;
71 }
72 string size = Page.Request.Form[pageSizeKey];
73 if(size != null)
74 {
75 try
76 {
77 pageSize = int.Parse(size);
78 if(pageSize > 0)return pageSize;
79 }
80 catch{}
81 }
82 return 20;
83 }
84 set
85 {
86 if(value > 0)
87 {
88 pageSize = value;
89 }
90 else
91 {
92 pageSize = 20;
93 }
94 }
95 }
96
97 /// <summary>
98 /// 记录总数
99 /// </summary>
100 public int RecordCount
101 {
102 get
103 {
104 if(recordCount >= 0)
105 {
106 return recordCount;
107 }
108 string count = Page.Request.Form[recordCountKey];
109 if(count != null)
110 {
111 try
112 {
113 recordCount = int.Parse(count);
114 if(recordCount >= 0)return recordCount;
115 }
116 catch{}
117 }
118 return 0;
119 }
120 set
121 {
122 if(value > 0)
123 {
124 recordCount = value;
125 }
126 else
127 {
128 recordCount = 0;
129 }
130 }
131 }
132 #endregion
133
134 #region 计算总的页面数
135 /// <summary>
136 /// 计算总的页面数
137 /// </summary>
138 public int CalculateTotalPages()
139 {
140 int pageCount = (this.RecordCount - 1)/this.PageSize;
141 if(pageCount < 0)
142 {
143 pageCount = 0;
144 }
145 return pageCount + 1;
146 }
147 #endregion
148
149 #region 输出控件
150 /// <summary>
151 /// Render Control
152 /// </summary>
153 protected override void Render(HtmlTextWriter wr)
154 {
155 RenderBegin(wr);
156
157 int i = CalculateTotalPages();
158
159 RenderBeginSpan(wr);
160
161 if(i <= 10)
162 {
163 for(int k = 0; k < i; k++)RenderSpan(wr, k);
164 }
165 else
166 {
167 int min = (this.PageIndex - 4);
168 int max = (this.PageIndex + 5);
169
170 if(min < 0)
171 {
172 min = 0;
173 max = 9;
174 }
175 if(max > i - 1)
176 {
177 max = i - 1;
178 min = max - 9;
179 }
180
181 for(int k = min; k <= max; k++)RenderSpan(wr, k);
182 }
183
184 RenderEndSpan(wr);
185 RenderMessage(wr);
186 RenderEnd(wr);
187 }
188
189 /// <summary>
190 /// 输出开头
191 /// </summary>
192 private void RenderBegin(HtmlTextWriter wr)
193 {
194 wr.Write("<div><table style='cursor:default'><tr><td>");
195 }
196
197 /// <summary>
198 /// 输出末尾
199 /// </summary>
200 private void RenderEnd(HtmlTextWriter wr)
201 {
202 wr.Write("</td></tr></table></div>");
203 }
204
205 /// <summary>
206 /// 输出首span
207 /// </summary>
208 private void RenderBeginSpan(HtmlTextWriter wr)
209 {
210 string strFirst = "<span style='cursor:hand;color:{0}' title='第一页'{1}><font face='webdings'>9</font></span> ";
211 string strPre = "<span style='cursor:hand;color:{0}' title='上一页'{1}><font face='webdings'>7</font></span> ";
212 if(this.PageIndex == 0)
213 {
214 wr.Write(string.Format(strFirst, this.linkColor, string.Empty));
215 wr.Write(string.Format(strPre, this.linkColor, string.Empty));
216 }
217 else
218 {
219 wr.Write(string.Format(strFirst, this.linkColor, " onclick='SetPageIndex(1)'"));
220 wr.Write(string.Format(strPre, this.linkColor, " onclick='SetPageIndex(" + this.PageIndex + ")'"));
221 }
222 }
223
224 /// <summary>
225 /// 输出尾span
226 /// </summary>
227 private void RenderEndSpan(HtmlTextWriter wr)
228 {
229 string strNext = "<span style='cursor:hand;color:{0}' title='下一页'{1}><font face='webdings'>8</font></span> ";
230 string strLast = "<span style='cursor:hand;color:{0}' title='最后一页'{1}><font face='webdings'>:</font></span> ";
231 if(this.PageIndex == this.CalculateTotalPages() - 1)
232 {
233 wr.Write(strNext, this.linkColor, string.Empty);
234 wr.Write(strLast, this.linkColor, string.Empty);
235 }
236 else
237 {
238 wr.Write(strNext, this.linkColor, " onclick='SetPageIndex(" + (this.PageIndex + 2) + ")'");
239 wr.Write(strLast, this.linkColor, " onclick='SetPageIndex(" + this.CalculateTotalPages() + ")'");
240 }
241 }
242
243 /// <summary>
244 /// 输出一个span标签
245 /// </summary>
246 private void RenderSpan(HtmlTextWriter wr, int pIndex)
247 {
248 if(pIndex == this.PageIndex)
249 {
250 wr.Write("<span style='width:12px;cursor:default'>{0}</span> ", pIndex + 1);
251 }
252 else
253 {
254 wr.Write("<span style='width:12px;cursor:hand;color:{0}' title='第{1}页' onclick='SetPageIndex({2})'>{1}</span> ", this.linkColor, pIndex + 1, pIndex + 1);
255 }
256 }
257
258 /// <summary>
259 /// 输出页信息
260 /// </summary>
261 private void RenderMessage(HtmlTextWriter wr)
262 {
263 wr.Write(" 总共{0}页/{1}条记录", this.CalculateTotalPages(), this.RecordCount);
264 }
265 #endregion
266
267 #region 输出JS和控件
268 /// <summary>
269 /// 输出JS和控件
270 /// </summary>
271 /// <param name="e"></param>
272 protected override void OnPreRender(EventArgs e)
273 {
274 System.Text.StringBuilder sb = new System.Text.StringBuilder();
275
276 sb.Append("/n<script language=javascript>/n");
277 sb.Append("function SetPageIndex(index)/n");
278 sb.Append("{/n");
279 sb.Append(" var form = document.forms[0];/n");
280 sb.Append(" if(location.search == '')/n");
281 sb.Append(" {/n");
282 sb.Append(" form.action = form.action + '?PageIndex=' + index;/n");
283 sb.Append(" form.submit();/n");
284 sb.Append(" return;/n");
285 sb.Append(" }/n");
286 sb.Append(" var re = /[?|&]PageIndex=/i;/n");
287 sb.Append(" if(re.test(location.search))/n");
288 sb.Append(" {/n");
289 sb.Append(" form.action = form.action.replace(/PageIndex=[^&]*/i, 'PageIndex=' + index);/n");
290 sb.Append(" form.submit();/n");
291 sb.Append(" return;/n");
292 sb.Append(" }/n");
293 sb.Append(" form.action = form.action + '&PageIndex=' + index;/n");
294 sb.Append(" form.submit();/n");
295 sb.Append("}/n");
296 sb.Append("</script>/n");
297
298
299 Page.RegisterClientScriptBlock("__PagerScript", sb.ToString());
300
301 Page.RegisterHiddenField(pageSizeKey, this.PageSize.ToString());
302 Page.RegisterHiddenField(recordCountKey, this.RecordCount.ToString());
303
304 base.OnPreRender(e);
305 }
306 #endregion
307 }
308 }
2 using System.Web;
3 using System.Web.UI;
4 using System.Web.UI.WebControls;
5 using System.Web.UI.HtmlControls;
6 using System.Text.RegularExpressions;
7
8
9 namespace MyWebControl
10 {
11 /// <summary>
12 /// 分页控件 Author:ahui 2006-02-16
13 /// </summary>
14 public class Pager : WebControl, INamingContainer
15 {
16 #region 成员字段
17 private static readonly string pageSizeKey = "__PAGER__PAGESIZE";
18 private static readonly string recordCountKey = "__PAGER__RECORDCOUNT";
19 private string linkColor = "#2C78C5";
20 private int pageIndex = -1;
21 private int pageSize = -1;
22 private int recordCount = -1;
23 #endregion
24
25 #region 属性字段
26 /// <summary>
27 /// 当前页索引,如果其值过大,则显示最后一页
28 /// </summary>
29 public int PageIndex
30 {
31 get
32 {
33 if(pageIndex < 0)
34 {
35 string page = Page.Request.QueryString["PageIndex"];
36 if(page != null)
37 {
38 try
39 {
40 pageIndex = int.Parse(page.Trim()) - 1;
41 }
42 catch{}
43 }
44 if(pageIndex < 0)pageIndex = 0;
45 }
46
47 int i = 0;
48 int pages = CalculateTotalPages();
49 if(pageIndex > pages - 1)
50 {
51 i = pages - 1;
52 }
53 else
54 {
55 i = pageIndex;
56 }
57 return i;
58 }
59 }
60
61 /// <summary>
62 /// 每页显示多少条记录
63 /// </summary>
64 public int PageSize
65 {
66 get
67 {
68 if(pageSize > 0)
69 {
70 return pageSize;
71 }
72 string size = Page.Request.Form[pageSizeKey];
73 if(size != null)
74 {
75 try
76 {
77 pageSize = int.Parse(size);
78 if(pageSize > 0)return pageSize;
79 }
80 catch{}
81 }
82 return 20;
83 }
84 set
85 {
86 if(value > 0)
87 {
88 pageSize = value;
89 }
90 else
91 {
92 pageSize = 20;
93 }
94 }
95 }
96
97 /// <summary>
98 /// 记录总数
99 /// </summary>
100 public int RecordCount
101 {
102 get
103 {
104 if(recordCount >= 0)
105 {
106 return recordCount;
107 }
108 string count = Page.Request.Form[recordCountKey];
109 if(count != null)
110 {
111 try
112 {
113 recordCount = int.Parse(count);
114 if(recordCount >= 0)return recordCount;
115 }
116 catch{}
117 }
118 return 0;
119 }
120 set
121 {
122 if(value > 0)
123 {
124 recordCount = value;
125 }
126 else
127 {
128 recordCount = 0;
129 }
130 }
131 }
132 #endregion
133
134 #region 计算总的页面数
135 /// <summary>
136 /// 计算总的页面数
137 /// </summary>
138 public int CalculateTotalPages()
139 {
140 int pageCount = (this.RecordCount - 1)/this.PageSize;
141 if(pageCount < 0)
142 {
143 pageCount = 0;
144 }
145 return pageCount + 1;
146 }
147 #endregion
148
149 #region 输出控件
150 /// <summary>
151 /// Render Control
152 /// </summary>
153 protected override void Render(HtmlTextWriter wr)
154 {
155 RenderBegin(wr);
156
157 int i = CalculateTotalPages();
158
159 RenderBeginSpan(wr);
160
161 if(i <= 10)
162 {
163 for(int k = 0; k < i; k++)RenderSpan(wr, k);
164 }
165 else
166 {
167 int min = (this.PageIndex - 4);
168 int max = (this.PageIndex + 5);
169
170 if(min < 0)
171 {
172 min = 0;
173 max = 9;
174 }
175 if(max > i - 1)
176 {
177 max = i - 1;
178 min = max - 9;
179 }
180
181 for(int k = min; k <= max; k++)RenderSpan(wr, k);
182 }
183
184 RenderEndSpan(wr);
185 RenderMessage(wr);
186 RenderEnd(wr);
187 }
188
189 /// <summary>
190 /// 输出开头
191 /// </summary>
192 private void RenderBegin(HtmlTextWriter wr)
193 {
194 wr.Write("<div><table style='cursor:default'><tr><td>");
195 }
196
197 /// <summary>
198 /// 输出末尾
199 /// </summary>
200 private void RenderEnd(HtmlTextWriter wr)
201 {
202 wr.Write("</td></tr></table></div>");
203 }
204
205 /// <summary>
206 /// 输出首span
207 /// </summary>
208 private void RenderBeginSpan(HtmlTextWriter wr)
209 {
210 string strFirst = "<span style='cursor:hand;color:{0}' title='第一页'{1}><font face='webdings'>9</font></span> ";
211 string strPre = "<span style='cursor:hand;color:{0}' title='上一页'{1}><font face='webdings'>7</font></span> ";
212 if(this.PageIndex == 0)
213 {
214 wr.Write(string.Format(strFirst, this.linkColor, string.Empty));
215 wr.Write(string.Format(strPre, this.linkColor, string.Empty));
216 }
217 else
218 {
219 wr.Write(string.Format(strFirst, this.linkColor, " onclick='SetPageIndex(1)'"));
220 wr.Write(string.Format(strPre, this.linkColor, " onclick='SetPageIndex(" + this.PageIndex + ")'"));
221 }
222 }
223
224 /// <summary>
225 /// 输出尾span
226 /// </summary>
227 private void RenderEndSpan(HtmlTextWriter wr)
228 {
229 string strNext = "<span style='cursor:hand;color:{0}' title='下一页'{1}><font face='webdings'>8</font></span> ";
230 string strLast = "<span style='cursor:hand;color:{0}' title='最后一页'{1}><font face='webdings'>:</font></span> ";
231 if(this.PageIndex == this.CalculateTotalPages() - 1)
232 {
233 wr.Write(strNext, this.linkColor, string.Empty);
234 wr.Write(strLast, this.linkColor, string.Empty);
235 }
236 else
237 {
238 wr.Write(strNext, this.linkColor, " onclick='SetPageIndex(" + (this.PageIndex + 2) + ")'");
239 wr.Write(strLast, this.linkColor, " onclick='SetPageIndex(" + this.CalculateTotalPages() + ")'");
240 }
241 }
242
243 /// <summary>
244 /// 输出一个span标签
245 /// </summary>
246 private void RenderSpan(HtmlTextWriter wr, int pIndex)
247 {
248 if(pIndex == this.PageIndex)
249 {
250 wr.Write("<span style='width:12px;cursor:default'>{0}</span> ", pIndex + 1);
251 }
252 else
253 {
254 wr.Write("<span style='width:12px;cursor:hand;color:{0}' title='第{1}页' onclick='SetPageIndex({2})'>{1}</span> ", this.linkColor, pIndex + 1, pIndex + 1);
255 }
256 }
257
258 /// <summary>
259 /// 输出页信息
260 /// </summary>
261 private void RenderMessage(HtmlTextWriter wr)
262 {
263 wr.Write(" 总共{0}页/{1}条记录", this.CalculateTotalPages(), this.RecordCount);
264 }
265 #endregion
266
267 #region 输出JS和控件
268 /// <summary>
269 /// 输出JS和控件
270 /// </summary>
271 /// <param name="e"></param>
272 protected override void OnPreRender(EventArgs e)
273 {
274 System.Text.StringBuilder sb = new System.Text.StringBuilder();
275
276 sb.Append("/n<script language=javascript>/n");
277 sb.Append("function SetPageIndex(index)/n");
278 sb.Append("{/n");
279 sb.Append(" var form = document.forms[0];/n");
280 sb.Append(" if(location.search == '')/n");
281 sb.Append(" {/n");
282 sb.Append(" form.action = form.action + '?PageIndex=' + index;/n");
283 sb.Append(" form.submit();/n");
284 sb.Append(" return;/n");
285 sb.Append(" }/n");
286 sb.Append(" var re = /[?|&]PageIndex=/i;/n");
287 sb.Append(" if(re.test(location.search))/n");
288 sb.Append(" {/n");
289 sb.Append(" form.action = form.action.replace(/PageIndex=[^&]*/i, 'PageIndex=' + index);/n");
290 sb.Append(" form.submit();/n");
291 sb.Append(" return;/n");
292 sb.Append(" }/n");
293 sb.Append(" form.action = form.action + '&PageIndex=' + index;/n");
294 sb.Append(" form.submit();/n");
295 sb.Append("}/n");
296 sb.Append("</script>/n");
297
298
299 Page.RegisterClientScriptBlock("__PagerScript", sb.ToString());
300
301 Page.RegisterHiddenField(pageSizeKey, this.PageSize.ToString());
302 Page.RegisterHiddenField(recordCountKey, this.RecordCount.ToString());
303
304 base.OnPreRender(e);
305 }
306 #endregion
307 }
308 }