国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.Net分頁控件發(fā)布

2024-07-10 13:10:53
字體:
供稿:網(wǎng)友

  由于.net自帶的分頁功能極其死板,自定義性不強不能滿足需求,俺花了一個多星期的時間 寫成的一個.net分頁控件。

  特性:

  1、支持datagrid,datalist等分種數(shù)據(jù)顯示控件,理論上只要有datasource的控件都可以

  2、支持url方式分頁,url分頁的每一頁都可以被搜索引擎搜到,并且支持url重寫

  3、控件樣式可自定義

  4、封裝完全,使用過程序只需寫一行代碼

  1 /******************************************************************
  2 ** 文件名:pager.cs
  3 ** 創(chuàng)建人:楊響武
  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     /// <summary>
 22     /// 分頁控件
 23     /// </summary>
 24     public class pager : label, inamingcontainer
 25     {
 26         #region 成員變量和構(gòu)造函數(shù)
 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 呈現(xiàn)方法
 59         protected override void render(htmltextwriter writer)
 60         {
 61 //            修改總頁數(shù)小于等于1的時候不呈現(xiàn)任何控件
 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("&nbsp;");
 89             l.rendercontrol(writer);
 90         }
 91
 92         void renderfirst (htmltextwriter writer)
 93         {
 94             firstbutton.rendercontrol(writer);
 95
 96             literalcontrol l = new literalcontrol("&nbsp;");
 97             l.rendercontrol(writer);
 98         }
 99
100         void renderlast (htmltextwriter writer)
101         {
102             lastbutton.rendercontrol(writer);
103
104             literalcontrol l = new literalcontrol("&nbsp;");
105             l.rendercontrol(writer);
106         }
107
108         void renderprevious (htmltextwriter writer)
109         {
110             previousbutton.rendercontrol(writer);
111
112             literalcontrol l = new literalcontrol("&nbsp;");
113             l.rendercontrol(writer);
114         }
115
116         void rendernext(htmltextwriter writer)
117         {
118             nextbutton.rendercontrol(writer);
119
120             literalcontrol l = new literalcontrol("&nbsp;");
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 = "<font color =red>" + (i + 1).tostring() + "</font>";
132
133                     l.rendercontrol(writer);
134                 }
135                 else
136                 {
137                     paginglinkbuttons[i].rendercontrol(writer);
138                 }
139                 if (i < (end - 1))
140                     writer.write("&nbsp;");
141             }
142
143             literalcontrol l1 = new literalcontrol("&nbsp;");
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             else
158             {
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         #endregion
177
178         #region 控件樹方法
179         /// <summary>
180         /// 信息標簽
181         /// </summary>
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         /// <summary>
209         /// 首頁末頁
210         /// </summary>
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             else
221             {
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             else
235             {
236                 lastbutton.enabled = false;
237             }
238             controls.add(lastbutton);
239         }
240
241         /// <summary>
242         /// 上一頁下一頁
243         /// </summary>
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             else
254             {
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             else
267             {
268                 nextbutton.enabled = false;
269             }
270             controls.add(nextbutton);
271         }
272         #endregion
273
274         #region 私有屬性
275         private bool hasprevious
276         {
277             get
278             {
279                 if (pageindex > 0)
280                     return true;
281
282                 return false;
283             }
284         }
285
286         private bool hasnext
287         {
288             get
289             {
290                 if (pageindex + 1 < calculatetotalpages() )
291                     return true;
292
293                 return false;
294             }
295         }
296         #endregion
297
298         #region 幫助方法和公共屬性
299        
300         /// <summary>
301         /// 獲取分頁導航按鈕的超鏈接字符串
302         /// </summary>
303         /// <param name="pageindex">該分頁按鈕相對應的頁索引</param>
304         /// <returns>分頁導航按鈕的超鏈接字符串</returns>
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         /// <summary>
338         /// 當前頁
339         /// </summary>
340         public int pageindex
341         {
342             get
343             {
344                 int _pageindex = 0;
345
346                 if ((!page.ispostback) && (context.pageindex > 0))
347                     _pageindex = context.pageindex;
348                 else
349                     _pageindex = convert.toint32(viewstate["pageindex"]);
350
351                 if (_pageindex < 0)
352                     return 0;
353                 else
354                 {
355                     if (_pageindex > calculatetotalpages()-1)
356                         return calculatetotalpages()-1;
357                     else
358                         return _pageindex;
359                 }
360             }
361             set
362             {
363                 viewstate["pageindex"] = value;
364             }
365         }
366
367         /// <summary>
368         /// 每頁記錄數(shù)
369         /// </summary>
370         public int pagesize
371         {
372             get
373             {
374                 int pagesize = convert.toint32(viewstate["pagesize"]);
375
376                 if (pagesize == 0)
377                 {
378                     return 10;
379                 }
380
381                 return pagesize;
382             }
383             set
384             {
385                 viewstate["pagesize"] = value;
386             }
387
388         }
389
390         /// <summary>
391         /// 總記錄數(shù)
392         /// </summary>
393         public int totalrecords
394         {
395             get
396             {
397                 return convert.toint32(viewstate["totalrecords"]);
398             }
399             set
400             {
401                 viewstate["totalrecords"] = value;
402             }
403         }
404
405         private string text = "共{0}頁";
406
407         private string linkcss = "";
408         /// <summary>
409         /// 鏈接樣式
410         /// </summary>
411         public string linkcss
412         {
413             get { return linkcss; }
414             set { linkcss = value;}
415         }
416
417         private string textcss = "";
418         /// <summary>
419         /// 文字樣式
420         /// </summary>
421         public string textcss
422         {
423             get { return textcss; }
424             set { textcss = value;}
425         }
426
427         public string textformat
428         {
429             get
430             {
431                 return text;
432             }
433             set
434             {
435                 text = value;
436             }
437         }
438
439         #endregion
440     }
441 }
442

  在頁面上只需要向下面這樣寫:

1 <%@ control language="c#" %>
2 <%@ register tagprefix="anchor" namespace="mycompany.controls" assembly="mycompany.controls" %>
3 <anchor:pager id="pager1" runat="server"></anchor:pager>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 株洲市| 政和县| 琼中| 岳西县| 无为县| 集贤县| 水城县| 黄浦区| 阜阳市| 丹巴县| 儋州市| 阆中市| 正蓝旗| 大足县| 遂川县| 凤城市| 古蔺县| 静安区| 黔南| 宝坻区| 天津市| 绿春县| SHOW| 翼城县| 龙江县| 新沂市| 海南省| 额尔古纳市| 崇阳县| 阳东县| 连云港市| 颍上县| 柳州市| 西平县| 太仆寺旗| 徐水县| 蓬安县| 沁源县| 黑山县| 四平市| 舟山市|