.Net分页控件
特性:1、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以2、支持url方式分页,url分页的每一页都可以被搜索引擎搜到,并且支持url重写3、控件样式可自定义4、封装完全,使用过程序只需写一行代码
1 /****************************************************************** 2 ** 文件名:Pager.cs 3 ** 创建人:杨响武 4 ** 日 期:2005年7月27日 5 ** 修改人: 6 ** 日 期: 7 ** 描 述: 8 ** 9 **---------------------------------------------------------------- 10 ******************************************************************/ 11 12 using System; 13 using System.Web.UI.WebControls; 14 using System.Web.UI.HtmlControls; 15 using System.Web; 16 using System.Web.UI; 17 using System.Text.RegularExpressions; 18 19 namespace MyCompany.Controls 20 { 21 /// 22 /// 分页控件 23 /// 24 public class Pager : Label, INamingContainer 25 { 26 #region 成员变量和构造函数 27 HttpContext context = HttpContext.Current; 28 Label countLabel; 29 HyperLink previousButton; 30 HyperLink nextButton; 31 HyperLink firstButton; 32 HyperLink lastButton; 33 HyperLink[] pagingLinkButtons; 34 35 public override ControlCollection Controls 36 { 37 get 38 { 39 EnsureChildControls(); 40 return base.Controls; 41 } 42 } 43 44 protected override void CreateChildControls() 45 { 46 Controls.Clear(); 47 48 AddCountLabel(); 49 50 AddPageButtons(); 51 52 AddPreviousNextHyperLinks(); 53 54 AddFirstLastHyperLinks(); 55 } 56 #endregion 57 58 #region 呈现方法 59 protected override void Render(HtmlTextWriter writer) 60 { 61 // 修改总页数小于等于1的时候不呈现任何控件 62 // int totalPages = CalculateTotalPages(); 63 // 64 // if (totalPages <= 1) 65 // return; 66 67 AddAttributesToRender(writer); 68 69 writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false); 70 71 RenderCountLabel(writer); 72 73 RenderFirst(writer); 74 75 RenderPrevious(writer); 76 77 RenderPagingButtons(writer); 78 79 RenderNext(writer); 80 81 RenderLast(writer); 82 } 83 84 void RenderCountLabel(HtmlTextWriter writer) 85 { 86 countLabel.RenderControl(writer); 87 88 LiteralControl l = new LiteralControl(" "); 89 l.RenderControl(writer); 90 } 91 92 void RenderFirst (HtmlTextWriter writer) 93 { 94 firstButton.RenderControl(writer); 95 96 LiteralControl l = new LiteralControl(" "); 97 l.RenderControl(writer); 98 } 99 100 void RenderLast (HtmlTextWriter writer)101 {102 lastButton.RenderControl(writer);103 104 LiteralControl l = new LiteralControl(" ");105 l.RenderControl(writer);106 }107 108 void RenderPrevious (HtmlTextWriter writer)109 {110 previousButton.RenderControl(writer);111 112 LiteralControl l = new LiteralControl(" ");113 l.RenderControl(writer);114 }115 116 void RenderNext(HtmlTextWriter writer)117 {118 nextButton.RenderControl(writer);119 120 LiteralControl l = new LiteralControl(" ");121 l.RenderControl(writer);122 }123 124 private void RenderButtonRange(int start, int end, HtmlTextWriter writer)125 {126 for (int i = start; i < end; i++)127 {128 if (PageIndex == i)129 {130 Literal l = new Literal();131 l.Text = "" + (i + 1).ToString() + "";132 133 l.RenderControl(writer);134 }135 else136 {137 pagingLinkButtons[i].RenderControl(writer);138 }139 if (i < (end - 1))140 writer.Write(" ");141 }142 143 LiteralControl l1 = new LiteralControl(" ");144 l1.RenderControl(writer);145 }146 147 private void RenderPagingButtons(HtmlTextWriter writer)148 {149 int totalPages;150 151 totalPages = CalculateTotalPages();152 153 if (totalPages <= 10)154 {155 RenderButtonRange(0, totalPages, writer);156 }157 else158 {159 int lowerBound = (PageIndex - 4);160 int upperBount = (PageIndex + 6);161 162 if (lowerBound <= 0)163 lowerBound = 0;164 165 if (PageIndex <= 4)166 RenderButtonRange(0, 10, writer);167 168 else if (PageIndex < (totalPages - 5))169 RenderButtonRange(lowerBound, (PageIndex + 6), writer);170 171 else if (PageIndex >= (totalPages - 5))172 RenderButtonRange((totalPages - 10), totalPages, writer);173 }174 }175 176 #endregion177 178 #region 控件树方法179 /// 180 /// 信息标签181 /// 182 void AddCountLabel()183 {184 countLabel = new Label();185 countLabel.ID = "countLabel";186 countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0"));187 188 Controls.Add(countLabel);189 }190 191 private void AddPageButtons()192 {193 pagingLinkButtons = new HyperLink[CalculateTotalPages()];194 195 for (int i = 0; i < pagingLinkButtons.Length; i++)196 {197 pagingLinkButtons[i] = new HyperLink();198 pagingLinkButtons[i].EnableViewState = false;199 pagingLinkButtons[i].Text = (i + 1).ToString();200 pagingLinkButtons[i].ID = i.ToString();201 pagingLinkButtons[i].CssClass = linkCss;202 pagingLinkButtons[i].NavigateUrl = GetHrefString(i);203 204 Controls.Add(pagingLinkButtons[i]);205 }206 }207 208 /// 209 /// 首页末页210 /// 211 void AddFirstLastHyperLinks()212 {213 firstButton = new HyperLink();214 firstButton.ID = "First";215 firstButton.Text = "首页";216 if(PageIndex != 0 && CalculateTotalPages() > 0)217 {218 firstButton.NavigateUrl = GetHrefString(0);219 }220 else221 {222 firstButton.Enabled = false;223 }224 225 Controls.Add(firstButton);226 227 lastButton = new HyperLink();228 lastButton.ID = "Last";229 lastButton.Text = "末页";230 if(PageIndex != CalculateTotalPages() - 1)231 {232 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);233 }234 else235 {236 lastButton.Enabled = false;237 }238 Controls.Add(lastButton);239 }240 241 /// 242 /// 上一页下一页243 /// 244 void AddPreviousNextHyperLinks()245 {246 previousButton = new HyperLink();247 previousButton.ID = "Prev";248 previousButton.Text = "上一页";249 if (HasPrevious)250 {251 previousButton.NavigateUrl = GetHrefString(PageIndex - 1);252 }253 else254 {255 previousButton.Enabled = false;256 }257 Controls.Add(previousButton);258 259 nextButton = new HyperLink();260 nextButton.ID = "Next";261 nextButton.Text = "下一页";262 if(HasNext)263 {264 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);265 }266 else267 {268 nextButton.Enabled = false;269 }270 Controls.Add(nextButton);271 }272 #endregion273 274 #region 私有属性275 private bool HasPrevious276 {277 get278 {279 if (PageIndex > 0)280 return true;281 282 return false;283 }284 }285 286 private bool HasNext287 {288 get289 {290 if (PageIndex + 1 < CalculateTotalPages() )291 return true;292 293 return false;294 }295 }296 #endregion297 298 #region 帮助方法和公共属性299 300 /// 301 /// 获取分页导航按钮的超链接字符串302 /// 303 /// 该分页按钮相对应的页索引304 /// 分页导航按钮的超链接字符串305 private string GetHrefString(int pageIndex)306 {307 string url = Page.Request.RawUrl;308 309 if (Regex.IsMatch(url, @"(d+).shtml", RegexOptions.IgnoreCase))310 {311 url = Regex.Replace(url, @"(d+).shtml", pageIndex + ".shtml");312 }313 314 if (Regex.IsMatch(url, @"PageIndex=(d+)", RegexOptions.IgnoreCase))315 {316 url = Regex.Replace(url, @"PageIndex=(d+)", "PageIndex=" + pageIndex.ToString());317 }318 319 return Page.Server.UrlPathEncode(url);320 }321 322 public int CalculateTotalPages()323 {324 int totalPagesAvailable;325 326 if (TotalRecords == 0)327 return 0;328 329 totalPagesAvailable = TotalRecords / PageSize;330 331 if ((TotalRecords % PageSize) > 0)332 totalPagesAvailable++;333 334 return totalPagesAvailable;335 }336 337 /// 338 /// 当前页339 /// 340 public int PageIndex341 {342 get343 {344 int _pageIndex = 0;345 346 if ((!Page.IsPostBack) && (context.PageIndex > 0))347 _pageIndex = context.PageIndex;348 else349 _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);350 351 if (_pageIndex < 0)352 return 0;353 else354 {355 if (_pageIndex > CalculateTotalPages()-1)356 return CalculateTotalPages()-1;357 else358 return _pageIndex;359 }360 }361 set362 {363 ViewState["PageIndex"] = value;364 }365 }366 367 /// 368 /// 每页记录数369 /// 370 public int PageSize371 {372 get373 {374 int pageSize = Convert.ToInt32(ViewState["PageSize"]);375 376 if (pageSize == 0)377 {378 return 10;379 }380 381 return pageSize;382 }383 set384 {385 ViewState["PageSize"] = value;386 }387 388 }389 390 /// 391 /// 总记录数392 /// 393 public int TotalRecords394 {395 get396 {397 return Convert.ToInt32(ViewState["TotalRecords"]);398 }399 set400 {401 ViewState["TotalRecords"] = value;402 }403 }404 405 private string text = "共{0}页";406 407 private string linkCss = "";408 /// 409 /// 链接样式410 /// 411 public string LinkCss412 {413 get { return linkCss; }414 set { linkCss = value;}415 }416 417 private string textCss = "";418 /// 419 /// 文字样式420 /// 421 public string TextCss422 {423 get { return textCss; }424 set { textCss = value;}425 }426 427 public string TextFormat 428 {429 get430 {431 return text;432 }433 set 434 {435 text = value;436 }437 }438 439 #endregion440 }441 }442 在页面上只需要向下面这样写:1 2 3
转载于:https://www.cnblogs.com/vibratea/archive/2009/07/24/1529841.html
相关资源:ASP.NET分页控件(AspNetPager)