arrow2 软件系统 arrow2 编程技术
.Net分页控件发布
.Net,分页控件
2007-10-12 02:18:49  

字体         收藏 推荐 打印 关闭

由于.net自带的分页功能极其死板,自定义性不强不能满足需求
俺花了一个多星期的时间写成的一个.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
12usingSystem;
13usingSystem.Web.UI.WebControls;
14usingSystem.Web.UI.HtmlControls;
15usingSystem.Web;
16usingSystem.Web.UI;
17usingSystem.Text.RegularExpressions;
18
19namespaceMyCompany.Controls
20{
21///<summary>
22///分页控件
23///</summary>
24publicclassPager:Label,INamingContainer
25{
26#region成员变量和构造函数
27HttpContextcontext=HttpContext.Current;
28LabelcountLabel;
29HyperLinkpreviousButton;
30HyperLinknextButton;
31HyperLinkfirstButton;
32HyperLinklastButton;
33HyperLink[]pagingLinkButtons;
34
35publicoverrideControlCollectionControls
36{
37get
38{
39EnsureChildControls();
40returnbase.Controls;
41}
42}
43
44protectedoverridevoidCreateChildControls()
45{
46Controls.Clear();
47
48AddCountLabel();
49
50AddPageButtons();
51
52AddPreviousNextHyperLinks();
53
54AddFirstLastHyperLinks();
55}
56#endregion
57
58#region呈现方法
59protectedoverridevoidRender(HtmlTextWriterwriter)
60{
61//修改总页数小于等于1的时候不呈现任何控件
62//inttotalPages=CalculateTotalPages();
63//
64//if(totalPages<=1)
65//return;
66
67AddAttributesToRender(writer);
68
69writer.AddAttribute(HtmlTextWriterAttribute.Class,this.CssClass,false);
70
71RenderCountLabel(writer);
72
73RenderFirst(writer);
74
75RenderPrevious(writer);
76
77RenderPagingButtons(writer);
78
79RenderNext(writer);
80
81RenderLast(writer);
82}
83
84voidRenderCountLabel(HtmlTextWriterwriter)
85{
86countLabel.RenderControl(writer);
87
88LiteralControll=newLiteralControl("");
89l.RenderControl(writer);
90}
91
92voidRenderFirst(HtmlTextWriterwriter)
93{
94firstButton.RenderControl(writer);
95
96LiteralControll=newLiteralControl("");
97l.RenderControl(writer);
98}
99
100voidRenderLast(HtmlTextWriterwriter)
101{
102lastButton.RenderControl(writer);
103
104LiteralControll=newLiteralControl("");
105l.RenderControl(writer);
106}
107
108voidRenderPrevious(HtmlTextWriterwriter)
109{
110previousButton.RenderControl(writer);
111
112LiteralControll=newLiteralControl("");
113l.RenderControl(writer);
114}
115
116voidRenderNext(HtmlTextWriterwriter)
117{
118nextButton.RenderControl(writer);
119
120LiteralControll=newLiteralControl("");
121l.RenderControl(writer);
122}
123
124privatevoidRenderButtonRange(intstart,intend,HtmlTextWriterwriter)
125{
126for(inti=start;i<end;i++)
127{
128if(PageIndex==i)
129{
130Literall=newLiteral();
131l.Text="<fontcolor=red>"+(i+1).ToString()+"</font>";
132
133l.RenderControl(writer);
134}
135else
136{
137pagingLinkButtons.RenderControl(writer);
138}
139if(i<(end-1))
140writer.Write("");
141}
142
143LiteralControll1=newLiteralControl("");
144l1.RenderControl(writer);
145}
146
147privatevoidRenderPagingButtons(HtmlTextWriterwriter)
148{
149inttotalPages;
150
151totalPages=CalculateTotalPages();
152
153if(totalPages<=10)
154{
155RenderButtonRange(0,totalPages,writer);
156}
157else
158{
159intlowerBound=(PageIndex-4);
160intupperBount=(PageIndex+6);
161
162if(lowerBound<=0)
163lowerBound=0;
164
165if(PageIndex<=4)
166RenderButtonRange(0,10,writer);
167
168elseif(PageIndex<(totalPages-5))
169RenderButtonRange(lowerBound,(PageIndex+6),writer);
170
171elseif(PageIndex>=(totalPages-5))
172RenderButtonRange((totalPages-10),totalPages,writer);
173}
174}
175
176#endregion
177
178#region控件树方法
179///<summary>
180///信息标签
181///</summary>
182voidAddCountLabel()
183{
184countLabel=newLabel();
185countLabel.ID="countLabel";
186countLabel.Text=string.Format(text,CalculateTotalPages().ToString("n0"));
187
188Controls.Add(countLabel);
189}
190
191privatevoidAddPageButtons()
192{
193pagingLinkButtons=newHyperLink[CalculateTotalPages()];
194
195for(inti=0;i<pagingLinkButtons.Length;i++)
196{
197pagingLinkButtons=newHyperLink();
198pagingLinkButtons.EnableViewState=false;
199pagingLinkButtons.Text=(i+1).ToString();
200pagingLinkButtons.ID=i.ToString();
201pagingLinkButtons.CssClass=linkCss;
202pagingLinkButtons.NavigateUrl=GetHrefString(i);
203
204Controls.Add(pagingLinkButtons);
205}
206}
207
208///<summary>
209///首页末页
210///</summary>
211voidAddFirstLastHyperLinks()
212{
213firstButton=newHyperLink();
214firstButton.ID="First";
215firstButton.Text="首页";
216if(PageIndex!=0&&CalculateTotalPages()>0)
217{
218firstButton.NavigateUrl=GetHrefString(0);
219}
220else
221{
222firstButton.Enabled=false;
223}
224
225Controls.Add(firstButton);
226
227lastButton=newHyperLink();
228lastButton.ID="Last";
229lastButton.Text="末页";
230if(PageIndex!=CalculateTotalPages()-1)
231{
232lastButton.NavigateUrl=GetHrefString(CalculateTotalPages()-1);
233}
234else
235{
236lastButton.Enabled=false;
237}
238Controls.Add(lastButton);
239}
240
241///<summary>
242///上一页下一页
243///</summary>
244voidAddPreviousNextHyperLinks()
245{
246previousButton=newHyperLink();
247previousButton.ID="Prev";
248previousButton.Text="上一页";
249if(HasPrevious)
250{
251previousButton.NavigateUrl=GetHrefString(PageIndex-1);
252}
253else
254{
255previousButton.Enabled=false;
256}
257Controls.Add(previousButton);
258
259nextButton=newHyperLink();
260nextButton.ID="Next";
261nextButton.Text="下一页";
262if(HasNext)
263{
264nextButton.NavigateUrl=GetHrefString(PageIndex+1);
265}
266else
267{
268nextButton.Enabled=false;
269}
270Controls.Add(nextButton);
271}
272#endregion
273
274#region私有属性
275privateboolHasPrevious
276{
277get
278{
279if(PageIndex>0)
280returntrue;
281
282returnfalse;
283}
284}
285
286privateboolHasNext
287{
288get
289{
290if(PageIndex+1<CalculateTotalPages())
291returntrue;
292
293returnfalse;
294}
295}
296#endregion
297
298#region帮助方法和公共属性
299
300///<summary>
301///获取分页导航按钮的超链接字符串
302///</summary>
303///<paramname="pageIndex">该分页按钮相对应的页索引</param>
304///<returns>分页导航按钮的超链接字符串</returns>
305privatestringGetHrefString(intpageIndex)
306{
307stringurl=Page.Request.RawUrl;
308
309if(Regex.IsMatch(url,@"(\d+).shtml",RegexOptions.IgnoreCase))
310{
311url=Regex.Replace(url,@"(\d+).shtml",pageIndex+".shtml");
312}
313
314if(Regex.IsMatch(url,@"PageIndex=(\d+)",RegexOptions.IgnoreCase))
315{
316url=Regex.Replace(url,@"PageIndex=(\d+)","PageIndex="+pageIndex.ToString());
317}
318
319returnPage.Server.UrlPathEncode(url);
320}
321
322publicintCalculateTotalPages()
323{
324inttotalPagesAvailable;
325
326if(TotalRecords==0)
327return0;
328
329totalPagesAvailable=TotalRecords/PageSize;
330
331if((TotalRecords%PageSize)>0)
332totalPagesAvailable++;
333
334returntotalPagesAvailable;
335}
336
337///<summary>
338///当前页
339///</summary>
340publicintPageIndex
341{
342get
343{
344int_pageIndex=0;
345
346if((!Page.IsPostBack)&&(context.PageIndex>0))
347_pageIndex=context.PageIndex;
348else
349_pageIndex=Convert.ToInt32(ViewState["PageIndex"]);
350
351if(_pageIndex<0)
352return0;
353else
354{
355if(_pageIndex>CalculateTotalPages()-1)
356returnCalculateTotalPages()-1;
357else
358return_pageIndex;
359}
360}
361set
362{
363ViewState["PageIndex"]=value;
364}
365}
366
367///<summary>
368///每页记录数
369///</summary>
370publicintPageSize
371{
372get
373{
374intpageSize=Convert.ToInt32(ViewState["PageSize"]);
375
376if(pageSize==0)
377{
378return10;
379}
380
381returnpageSize;
382}
383set
384{
385ViewState["PageSize"]=value;
386}
387
388}
389
390///<summary>
391///总记录数
392///</summary>
393publicintTotalRecords
394{
395get
396{
397returnConvert.ToInt32(ViewState["TotalRecords"]);
398}
399set
400{
401ViewState["TotalRecords"]=value;
402}
403}
404
405privatestringtext="共{0}页";
406
407privatestringlinkCss="";
408///<summary>
409///链接样式
410///</summary>
411publicstringLinkCss
412{
413get{returnlinkCss;}
414set{linkCss=value;}
415}
416
417privatestringtextCss="";
418///<summary>
419///文字样式
420///</summary>
421publicstringTextCss
422{
423get{returntextCss;}
424set{textCss=value;}
425}
426
427publicstringTextFormat
428{
429get
430{
431returntext;
432}
433set
434{
435text=value;
436}
437}
438
439#endregion
440}
441}
442
在页面上只需要向下面这样写:
1<%@ControlLanguage="c#"%>
2<%@RegisterTagPrefix="Anchor"Namespace="MyCompany.Controls"Assembly="MyCompany.Controls"%>
3<ANCHOR:PAGERid="Pager1"runat="server"></ANCHOR:PAGER>
4


来自:不详   作者: 未知   责任编辑:admin | 返回顶部


用户评论
文章分类


名称 作者 内容 论坛

关键字
.Net,分页控件

google中搜索
相关文章
  · Asp.net中执行U ...
  · 第三方Web Html ...
  · C#实现回车自 ...
  · Asp.net取得页 ...
  · ASP.net在页面 ...
  · ASP.NET连接Acce ...
  · ASP.NET 2.0的视 ...
  · asp.net常用技巧
  · ASP.net中的文 ...
  · asp.net跳转页 ...
  · asp.NET打印
  · asp.net中同时 ...
  · ASP.NET对XML进 ...
  · asp.NET操作图 ...
  · 一个.net 压缩 ...
  · ASP.NET读取照 ...
  · asp.net 2.0 缓存 ...
  · ASP.NET图象处 ...
  · 提高ASP.NET生 ...
  · ASP.NET使用Jmai ...

最新发表
  ·  C# 打造个性浏览器
  ·  域名解析操作说明
  ·  W2K下安装MYSQL 4.0.21
  ·  Asp.net中执行Url重写
  ·  第三方Web Html Editor的使用
  ·  Iframe跨域问题.
  ·  垃圾邮件评判优化
  ·  如何对电子商务系统进行需求分析
  ·  IPS支付说明
  ·  谈谈PHP文章系统和SEO的关系