一个简单的分页控件

本文介绍了一个自定义的ASP.NET分页控件实现,该控件通过处理请求参数来确定当前页码和每页显示的记录数,并能够根据记录总数计算总页数。此外,还提供了用于渲染分页链接的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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("&nbsp;&nbsp;总共{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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值