AspNetPager分頁控件


  1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Fenye.aspx.cs" Inherits="WebApplication1.Fenye" %>
  2 
  3 <!DOCTYPE html>
  4 
  5 <html xmlns="http://www.w3.org/1999/xhtml">
  6 <head runat="server">
  7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  8     <title></title>
  9     <style type="text/css">
 10         .pager_manu .pageinfo {
 11             float: right;
 12         }
 13 
 14         .pager_manu A {
 15             float: left;
 16             /*BORDER: #8db5d7 1px solid;  */
 17             PADDING-BOTTOM: 5px;
 18             MARGIN-left: 2px;
 19             MARGIN-right: 2px;
 20             PADDING-LEFT: 1px;
 21             PADDING-RIGHT: 1px;
 22             COLOR: #000;
 23             TEXT-DECORATION: none;
 24             PADDING-TOP: 1px;
 25         }
 26 
 27             .pager_manu A:hover {
 28                 /*BORDER: red 1px solid; */
 29                 /*COLOR: #666; */
 30                 text-decoration: underline;
 31             }
 32 
 33             .pager_manu A:active {
 34                 /*BORDER: #999 1px solid;  */
 35                 COLOR: #666;
 36             }
 37 
 38         .pager_manu .current {
 39             float: left;
 40             /*BORDER: #e89954 1px solid;*/
 41             PADDING-BOTTOM: 1px;
 42             MARGIN-left: 2px;
 43             MARGIN-right: 2px;
 44             PADDING-LEFT: 1px;
 45             PADDING-RIGHT: 1px;
 46             COLOR: #000;
 47             FONT-WEIGHT: bold;
 48             PADDING-TOP: 1px;
 49             color: #ff0000;
 50             /*background-color:#ffca7d;*/
 51         }
 52 
 53         .pager_manu .disable {
 54             cursor: default;
 55             COLOR: #999;
 56             text-decoration: none;
 57         }
 58 
 59         .pager_manu .summary {
 60             float: right;
 61             margin-right: 2px;
 62             /*COLOR: #036cb4;*/
 63             color: #000000;
 64             PADDING-BOTTOM: 1px;
 65             MARGIN: 2px;
 66             PADDING-LEFT: 2px;
 67             PADDING-RIGHT: 2px;
 68             TEXT-DECORATION: none;
 69             PADDING-TOP: 1px;
 70         }
 71 
 72         .pager_manu .pagetext {
 73             float: left;
 74             cursor: pointer;
 75             /*BORDER: #bbb 1px solid; */
 76             PADDING-BOTTOM: 1px;
 77             MARGIN: 2px;
 78             PADDING-LEFT: 1px;
 79             PADDING-RIGHT: 1px;
 80             PADDING-TOP: 1px;
 81         }
 82 
 83         .pager_manu .pageShowNum {
 84             color: blue;
 85         }
 86     </style>
 87 </head>
 88 <body>
 89    
 90     <form id="form1" runat="server">
 91         <div>
 92             <asp:Repeater ID="Repeater1" runat="server">
 93                 <HeaderTemplate>
 94                     <table border="0" cellspace width="100%" class="mytable newTable">
 95                         <thead>
 96                             <tr style="font-weight: bold; line-height: 25px; height: 25px;">
 97                                 <td class="brs" width="3%" nowrap="" align="center">
 98                                     <strong>序號</strong>
 99                                 </td>
100                                 <td class="brs" width="3%" style="text-align:center;">
101 
102                                     <asp:CheckBox ID="CheckBox1" runat="server" ToolTip="全選" onclick="checkss(this);" />
103 
104                                 </td>
105                                 <td class="brs" >
106                                     <strong>文件名稱</strong>
107                                 </td>
108                                 <td class="brs" width="10%" >
109                                     <strong>更改名稱</strong>
110                                 </td>
111                                 <td class="brs" width="10%">
112                                     <strong>文件大小</strong>
113                                 </td>
114                                 <td class="brs" width="10%" >
115                                     <strong>上傳人</strong>
116                                 </td>
117                                 <td class="brs" width="15%" style="text-align: center;">
118                                     <strong>創建時間</strong>
119                                 </td>
120                                 <td class="brs" width="5%">
121                                     <strong>排序號</strong>
122                                 </td>
123                             </tr>
124                         </thead>
125                         <tbody>
126                 </HeaderTemplate>
127                 <ItemTemplate>
128                     <tr id='tr_<%# DataBinder.Eval(Container.DataItem, "FGBH")%>'>
129                         <td style="text-align: center; color: Blue;">
130                             <%#Container.ItemIndex + 1 + pageNav1.PageSize * (pageNav1.CurrentPageIndex - 1) %>
131                         </td>
132                         <td style="color: Blue; text-align:center;">
133                             <input type="checkbox" id="CheckBox11" class="checkBox" guid='<%# DataBinder.Eval(Container.DataItem, "FGBH") %>' />
134                         </td>
135                         <td>
136                             <div runat="server" id="divpp" style="cursor: pointer; color: #6300FF;">
137                                 <%# Eval("FGMC")%>
138                                 <%-- <asp:Literal ID="ltDown" runat="server"></asp:Literal>--%>
139                             </div>
140                         </td>
141                         <td></td>
142                         <td></td>
143                          <td style="text-align: center;">
144                             <%# Eval("XGR")%>
145                         </td>
146                         <td style="text-align: center;">
147                             <%# Eval("CJSJ")%>
148                         </td>
149                         <td style="text-align: center;">
150                             <%# Eval("PXM")%>
151                         </td>
152                     </tr>
153                 </ItemTemplate>
154                 <FooterTemplate>
155                     </tbody> </table>
156                 </FooterTemplate>
157             </asp:Repeater>
158         </div>
159         <div class="pagingTopDiv">
160             <oswc:OsPageNavigation ID="pageNav1" runat="server" OnPageIndexChanged="pageNav_PageChanged">
161             </oswc:OsPageNavigation>
162         </div>
163     </form>
164 </body>
165 </html>
 1 using Oceansoft.Net.Bll.Common;
 2 using SubSonic;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Data;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Web;
 9 using System.Web.UI;
10 using System.Web.UI.WebControls;
11 
12 namespace WebApplication1
13 {
14     public partial class Fenye : System.Web.UI.Page
15     {
16         protected void Page_Load(object sender, EventArgs e)
17         {
18             if (!IsPostBack)
19             {
20                 LoadInfo(1);
21 
22             }
23         }
24 
25         public void LoadInfo(int pageIndex)
26         {
27             PagingEntity_CusMS pe = new PagingEntity_CusMS();
28             pe.PageIndex = pageIndex;
29             pageNav1.CurrentPageIndex = pe.PageIndex;
30             pe.PageSize = 10;
31             DataTable dt = GetContractMain(pe);
32             this.Repeater1.DataSource = dt;
33             this.Repeater1.DataBind();
34             CommonBind.BindPageNavigation(pageNav1, pe.PageSize, pe.TotalRecords, pageIndex);
35         }
36 
37         protected void pageNav_PageChanged(object src, EventArgs e)
38         {
39             LoadInfo(pageNav1.CurrentPageIndex);
40         }
41 
42         public DataTable GetContractMain(PagingEntity_CusMS pe)
43         {
44             StringBuilder sblder = new StringBuilder();
45             string sql = "";
46             sblder.Append(" SELECT FGBH AS Guid, * from T_YDZF_FLFG  where 1=1 ");
47 
48             sql = pe.GetPagingSql_SQLServer(sblder.ToString());
49             DataTable dt = new DataTable();
50 
51             QueryCommand qc = new InlineQuery().GetCommand(sql, pe.Paras.ToArray());
52             dt = DataService.GetDataSet(qc).Tables[0];
53             return dt;
54         }
55     }
56 }
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Collections.Specialized;
  4 using System.ComponentModel;
  5 using System.Linq;
  6 using System.Web;
  7 using System.Web.UI;
  8 
  9 namespace WebApplication1
 10 {
 11     public class PageChangedEventArgs : EventArgs
 12     {
 13         /// <summary>
 14         /// 
 15         /// </summary>
 16         public int NewPagesIndex;
 17         /// <summary>
 18         /// 
 19         /// </summary>
 20         public int NewPageIndex;
 21 
 22     }
 23     /// <summary>
 24     /// 
 25     /// </summary>
 26     [DefaultProperty("CurrentPageIndex"),
 27     ToolboxData("<oswc:OsPageNavigation runat=server></oswc:OsPageNavigation>")]
 28     public class OsPageNavigation : Control, IPostBackDataHandler, IPostBackEventHandler//, ICallbackEventHandler
 29     {
 30         ///<summary> 
 31         ///委托頁面索引事件 
 32         ///</summary> 
 33         public delegate void PageChangedEventHandler(object sender, PageChangedEventArgs e);
 34 
 35         /// <summary>
 36         /// 分頁事件
 37         /// </summary>
 38         public event PageChangedEventHandler PageIndexChanged;
 39 
 40         # region << Public Properties >>
 41         ///<summary> 
 42         ///樣式屬性 
 43         ///</summary> 
 44         [Bindable(false),
 45         Category("Style"),
 46         DefaultValue("pager_manu")]
 47         private string CssClass
 48         {
 49             get
 50             {
 51                 return "pager_manu";
 52             }
 53         }
 54 
 55         private int totalCount = -1;
 56         ///<summary> 
 57         ///記錄總數 
 58         ///</summary> 
 59         [Bindable(false),
 60         Category("TotalCount"),
 61         DefaultValue(0)]
 62         public int RecordCount
 63         {
 64             get
 65             {
 66                 if (totalCount == -1)
 67                 {
 68                     if (this.IsNumeric(ViewState["TotalCount"]))
 69                     {
 70                         totalCount = (int)ViewState["TotalCount"];
 71                     }
 72                     else
 73                     {
 74                         totalCount = 0;
 75                     }
 76                 }
 77                 return totalCount;
 78             }
 79             set
 80             {
 81                 ViewState["TotalCount"] = value;
 82                 totalCount = value;
 83             }
 84         }
 85 
 86         private int pageSize = -1;
 87         ///<summary> 
 88         ///分頁大小 
 89         ///</summary> 
 90         [Bindable(false),
 91         Category("PageSize"),
 92         DefaultValue(15)]
 93         public int PageSize
 94         {
 95             get
 96             {
 97                 if (pageSize == -1)
 98                 {
 99                     if (this.IsNumeric(ViewState["PageSize"]))
100                     {
101                         pageSize = (int)ViewState["PageSize"];
102                     }
103                     else
104                     {
105                         pageSize = 15;
106                     }
107                 }
108                 return pageSize;
109             }
110             set
111             {
112                 ViewState["PageSize"] = value;
113                 pageSize = value;
114             }
115         }
116 
117         private int currentPagesIndex = -1;
118         /// <summary>
119         /// 當前頁群索引
120         /// </summary>
121         [Bindable(false),
122         Category("CurrentPagesIndex"),
123         DefaultValue(0)]
124         public int CurrentPagesIndex
125         {
126             get
127             {
128                 if (currentPagesIndex == -1)
129                 {
130                     if (this.IsNumeric(ViewState["CurrentPagesIndex"]))
131                     {
132                         currentPagesIndex = (int)ViewState["CurrentPagesIndex"];
133                     }
134                     else
135                     {
136                         currentPagesIndex = 0;
137                     }
138                 }
139                 return currentPagesIndex;
140             }
141             set
142             {
143                 ViewState["CurrentPagesIndex"] = value;
144                 //currentPagesIndex = value;
145                 if (currentPageIndex != 1)
146                     currentPagesIndex = value;
147                 else
148                     currentPagesIndex = 0;
149             }
150 
151         }
152 
153         private int currentPageIndex = -1;
154         ///<summary> 
155         ///當前頁索引 
156         ///</summary> 
157         [Bindable(false),
158         Category("CurrentPageIndex"),
159         DefaultValue(1)]
160         public int CurrentPageIndex
161         {
162             get
163             {
164                 if (currentPageIndex == -1)
165                 {
166                     if (this.IsNumeric(ViewState["CurrentPageIndex"]))
167                     {
168                         return (int)ViewState["CurrentPageIndex"];
169                     }
170                     else
171                     {
172                         return 1;
173                     }
174                 }
175                 return currentPageIndex;
176             }
177             set
178             {
179                 ViewState["CurrentPageIndex"] = value;
180                 currentPageIndex = value;
181             }
182         }
183 
184         ///<summary> 
185         ///頁群屬性 
186         ///</summary> 
187         [Bindable(false),
188         Category("PaginationCount"),
189         DefaultValue(10)]
190         public int PaginationCount
191         {
192             get
193             {
194                 return 10;
195             }
196             set
197             {
198                 ;
199             }
200         }
201 
202 
203 
204         ///// <summary>
205         ///// 是否為異步事件
206         ///// </summary>
207         //[Bindable(false),
208         //  Category("IsAsync"),
209         //  DefaultValue(0)]
210         //public bool IsAsync
211         //{
212         //    set
213         //    {
214 
215         //        ViewState["IsAsync"] = value;
216         //    }
217         //    get
218         //    {
219         //        if (null != ViewState["IsAsync"])
220         //        {
221         //            return Boolean.Parse(ViewState["IsAsync"].ToString());
222         //        }
223         //        else
224         //        {
225         //            return false;
226         //        }
227         //    }
228         //}
229 
230         //private bool displayPageInfo = true;
231         /// <summary>
232         /// 是否顯示分頁信息
233         /// </summary>
234         [Bindable(false),
235           DefaultValue(true)]
236         public bool DisplayPageInfo
237         {
238             get
239             {
240                 if (ViewState["DisplayPageInfo"] is bool)
241                 {
242                     return (bool)ViewState["DisplayPageInfo"];
243                 }
244                 else
245                 {
246                     return true;
247                 }
248             }
249             set
250             {
251                 ViewState["DisplayPageInfo"] = value;
252             }
253         }
254 
255         #region <<分頁控件按鈕名稱>>
256 
257         ///<summary> 
258         ///標記樣式 
259         ///</summary> 
260         [Bindable(false),
261         Category("Text"),
262         DefaultValue("首頁")]
263         private string FirstName
264         {
265             get
266             {
267                 //return ViewState["FirstName"] == null ? "首頁" : (string)ViewState["FirstName"];
268                 return "首頁";
269             }
270             //set
271             //{
272             //    ViewState["FirstName"] = value;
273             //}
274         }
275 
276 
277         /// <summary>
278         /// 上一頁
279         /// </summary>
280         [Bindable(false),
281          Category("Text"),
282          DefaultValue("上頁")]
283         private string PreName
284         {
285             get
286             {
287                 return "上頁";
288                 //return ViewState["PreName"] == null ? "上一頁" : (string)ViewState["PreName"];
289             }
290             //set
291             //{
292             //    ViewState["PreName"] = value;
293 
294             //}
295         }
296 
297         /// <summary>
298         /// 下一頁
299         /// </summary>
300         [Bindable(false)]
301         [Category("Text")]
302         [DefaultValue("下頁")]
303         private string NextName
304         {
305             get
306             {
307                 return "下頁";
308                 //return ViewState["NextName"] == null ? "后一頁" : (string)ViewState["NextName"];
309             }
310 
311             //set
312             //{
313 
314             //    ViewState["NextName"] = value;
315 
316             //}
317         }
318 
319         ///<summary> 
320         ///下一頁 
321         ///</summary> 
322         [Bindable(false),
323         Category("Text"),
324         DefaultValue("尾頁")]
325         private string LastName
326         {
327             get
328             {
329                 return "尾頁";
330                 //return ViewState["LastName"] == null ? "最后頁" : (string)ViewState["LastName"];
331             }
332 
333             //set
334             //{
335 
336             //    ViewState["LastName"] = value;
337 
338             //}
339         }
340 
341         #endregion
342 
343         # endregion
344 
345         # region << Public Mothod >>
346         ///<summary> 
347         ///當由類實現時,使服務器控件能夠處理將窗體發送到服務器時引發的事件。 
348         ///</summary> 
349         ///<param name="e">所傳遞的參數</param> 
350         public void RaisePostBackEvent(string e)
351         {
352             //當發生回送的時候改變控件當前索引 
353             if (e == "top")
354             {
355                 CurrentPageIndex = 1;
356                 CurrentPagesIndex = 0;
357             }
358             else if (e == "last")
359             {
360                 CurrentPageIndex = (RecordCount + PageSize - 1) / PageSize;
361 
362                 // CurrentPagesIndex = ((RecordCount + PageSize - 1) / PageSize + PaginationCount - 1) / PaginationCount - 1;
363 
364                 if (CurrentPageIndex < 1)
365                 {
366                     CurrentPageIndex = 1;
367                 }
368                 //if (CurrentPagesIndex < 0)
369                 //{
370                 //    CurrentPagesIndex = 0;
371                 //}
372             }
373             else if (e == "pre")
374             {
375                 if (CurrentPageIndex > 1)
376                 {
377                     CurrentPageIndex--;
378 
379                     //if (CurrentPageIndex < CurrentPagesIndex * PaginationCount && CurrentPageIndex > 0)
380                     //{
381                     //    CurrentPagesIndex--;
382                     //}
383 
384                     //if (CurrentPageIndex % 10 == 0)
385                     //    CurrentPagesIndex = CurrentPageIndex / 10 - 1;
386 
387                 }
388             }
389             else if (e == "next")
390             {
391                 if (CurrentPageIndex < (RecordCount + PageSize - 1) / PageSize)
392                 {
393                     CurrentPageIndex++;
394 
395                     //if (CurrentPageIndex > (CurrentPagesIndex + 1) * PaginationCount - 1 && CurrentPageIndex < RecordCount - 1)
396                     //{
397 
398                     //    CurrentPagesIndex++;
399                     //}
400                 }
401             }
402             else
403             {
404                 CurrentPageIndex = int.Parse(e.ToString());
405             }
406 
407             //發生回送事件時引發OnPageIndexChange事件 
408             PageChangedEventArgs ev = new PageChangedEventArgs();
409             ev.NewPageIndex = CurrentPageIndex;
410             ev.NewPagesIndex = CurrentPagesIndex;
411             OnPageIndexChanged(this, ev);
412         }
413 
414         ///<summary> 
415         ///當由類實現時,為 ASP.NET 服務器控件處理回發數據。 
416         ///</summary> 
417         ///<param name="postDataKey">數據集合元素索引</param> 
418         ///<param name="values">string 的排序集合</param> 
419         ///<returns></returns> 
420         public bool LoadPostData(string postDataKey, NameValueCollection values)
421         {
422             CurrentPageIndex = Int32.Parse(values[this.UniqueID].Split('|')[0]);
423 
424             CurrentPagesIndex = Int32.Parse(values[this.UniqueID].Split('|')[1]);
425 
426             return false;
427 
428         }
429 
430         ///<summary> 
431         ///當頁面索引改變,觸發委托 
432         ///</summary> 
433         ///<param name="e"></param> 
434         protected virtual void OnPageIndexChanged(object sender, PageChangedEventArgs e)
435         {
436             if (PageIndexChanged != null)
437                 PageIndexChanged(sender, e);
438         }
439         # endregion
440 
441         #region << override method >>
442 
443         ///<summary> 
444         ///將此控件呈現給指定的輸出參數。 
445         ///</summary> 
446         ///<param name="output">要寫出到的 HTML 編寫器 </param> 
447         protected override void Render(HtmlTextWriter output)
448         {
449             string Pagestring = "";  //定義頁碼呈現字符串 
450             string Text = null;          //輸出主結構字符串變量定義 
451             int NO = 0;
452             int allPages = (RecordCount + PageSize - 1) / PageSize; //總頁數
453             int startPage = 0;
454             int endPage = PaginationCount;
455 
456             //當頁大小小於0時,還原為1,防止預算出現除0錯誤 
457             if (!(PageSize > 0))
458             {
459                 PageSize = 1;
460             }
461 
462             if (DisplayPageInfo)
463             {
464                 if (CurrentPageIndex > 5)
465                 {
466                     startPage = CurrentPageIndex - 5;
467                     if (endPage < allPages)
468                     {
469                         endPage = CurrentPageIndex + 5;
470                     }
471                     else
472                     {
473                         endPage = allPages;
474                     }
475 
476                 }
477                 //計算出總頁數,並循環輸出頁碼 
478                 for (int i = startPage; i < endPage; i++)
479                 {
480                     //獲得頁群內頁碼 
481                     NO = PaginationCount * (CurrentPagesIndex) + i + 1;
482 
483                     if (NO <= allPages)
484                     {
485                         //判斷頁碼是否為當前頁 
486 
487                         if (CurrentPageIndex != NO)
488                         {
489                             Pagestring += string.Format("<a href=\"javascript:{0}\" class='pagenumber'>{1}</a>",
490                                 Page.GetPostBackEventReference(this, (NO).ToString()), (NO).ToString());
491                         }
492                         //如果不是,頁面部分無連接 
493                         else
494                         {
495                             Pagestring += "<span class='current pagenumber'>" + (NO).ToString() + "</span>";
496                         }
497                     }
498                 }
499 
500                 if (!(Pagestring.Trim().Length > 0))
501                 {
502                     Pagestring = "";
503                 }
504             }
505 
506 
507             //輸出主結構 
508             Text = string.Format("<div class=\"{0}\">", this.CssClass);
509 
510             if (DisplayPageInfo)
511             {
512                 int currentPageIndex = CurrentPageIndex;
513                 int totalPageCount = RecordCount / PageSize + (RecordCount % PageSize > 0 ? 1 : 0);
514 
515                 if (currentPageIndex > totalPageCount)
516                     currentPageIndex = totalPageCount;
517 
518                 int perPageCount = PageSize;
519                 if (RecordCount >= PageSize)
520                 {
521                     if (CurrentPageIndex == RecordCount / PageSize + (RecordCount % PageSize > 0 ? 1 : 0))
522                     {
523                         perPageCount = RecordCount - (CurrentPageIndex - 1) * PageSize;
524                     }
525                 }
526                 else
527                 {
528                     perPageCount = RecordCount;
529                 }
530 
531                 Text += string.Format("<div class=\"summary\">共{2}條記錄 當前 {0}/{1} 頁</div>", CurrentPageIndex, RecordCount / PageSize + (RecordCount % PageSize > 0 ? 1 : 0), RecordCount);
532                // Text += string.Format("<div class=\"summary\">記錄總數:<span class=\"pageShowNum\">{2}</span>&nbsp;&nbsp;當前頁:<span class=\"pageShowNum\">{0}</span>&nbsp;&nbsp;總頁數:<span class=\"pageShowNum\">{1}</span></div>", perPageCount, RecordCount / PageSize + (RecordCount % PageSize > 0 ? 1 : 0), RecordCount);
533 
534             }
535             Text += "<div class='pageinfo'>";
536 
537             if (CurrentPageIndex == 1)
538             {
539                 Text += string.Format("<span class='pagetext disable'>{0}</span>", FirstName);
540             }
541             else
542             {
543                 Text += string.Format("<a href=\"javascript:{0}\" class='pagetext'>{1}</a>", Page.GetPostBackEventReference(this, "top"), FirstName);
544             }
545 
546             if (CurrentPageIndex > 1)
547             {
548                 Text += string.Format("<a href=\"javascript:{0}\" class='pagetext'>{1}</a>", Page.GetPostBackEventReference(this, "pre"), PreName);
549             }
550             else
551             {
552                 Text += string.Format("<span class='pagetext disable'>{0}</span>", PreName);
553             }
554 
555             Text += "$Pagestring$";
556 
557             if (CurrentPageIndex < (RecordCount + PageSize - 1) / PageSize)
558             {
559                 Text += string.Format("<a href=\"javascript:{0}\" class=\"pagetext\">{1}</a>", Page.GetPostBackEventReference(this, "next"), NextName);
560             }
561             else
562             {
563                 Text += string.Format("<span class='pagetext disable'>{0}</span>", NextName);
564             }
565 
566 
567             if (CurrentPageIndex == (RecordCount + PageSize - 1) / PageSize)
568             {
569                 Text += string.Format("<span class='pagetext disable'>{0}</span>", LastName);
570             }
571             else
572             {
573                 if (RecordCount < PageSize || RecordCount == PageSize)
574                 {
575                     Text += string.Format("<span class='pagetext disable'>{0}</span>", LastName);
576                 }
577                 else
578                 {
579                     Text += string.Format("<a href=\"javascript:{0}\" class='pagetext'>{1}</a>", Page.GetPostBackEventReference(this, "last"), LastName);
580                 }
581             }
582             Text += "</div>";
583 
584             Text += "</div><input type =\"hidden\" name=\"" + this.UniqueID + "\" value=\"" + this.CurrentPageIndex + "|" + this.CurrentPagesIndex + "\">";
585 
586             //替換頁碼部分 
587             Text = Text.Replace("$Pagestring$", Pagestring);
588             if (RecordCount == 0)
589             {
590                 output.Write("");
591             }
592             else
593             {
594                 output.Write(Text);
595             }
596         }
597 
598         # region << 樣式二 >>
599         /*
600         protected override void Render(HtmlTextWriter output)
601         {
602             string Pagestring = "";  //定義頁碼呈現字符串 
603             string Text = null;          //輸出主結構字符串變量定義 
604             int NO = 0;
605 
606             //當頁大小小於0時,還原為1,防止預算出現除0錯誤 
607             if (!(PageSize > 0))
608             {
609                 PageSize = 1;
610             }
611 
612             if (DisplayPageInfo)
613             {
614                 //計算出總頁數,並循環輸出頁碼 
615                 for (int i = 0; i < PaginationCount; i++)
616                 {
617                     //獲得頁群內頁碼 
618                     NO = PaginationCount * (CurrentPagesIndex) + i + 1;
619                     if (NO <= (TotalCount + PageSize - 1) / PageSize)
620                     {
621                         //判斷頁碼是否為當前頁 
622 
623                         if (CurrentPageIndex != NO)
624                         {
625                             Pagestring += string.Format("<li class=\"pagenumber\"><a onclick=\"javascript:{0}\" href='javascript:void(0)'>{1}</a>&nbsp;</li>",
626                                 Page.GetPostBackEventReference(this, (NO).ToString()), (NO).ToString());
627                             //string.Format("turnPage({0})", (NO).ToString()), (NO).ToString());
628 
629                         }
630                         //如果不是,頁面部分無連接 
631                         else
632                         {
633                             Pagestring += "<li class='currentpagenumber'><span>" + (NO).ToString() + "&nbsp;</span></li>";
634                         }
635                     }
636                 }
637 
638                 if (!(Pagestring.Trim().Length > 0))
639                 {
640                     Pagestring = "";
641                 }
642             }
643 
644 
645             //輸出主結構 
646             Text = string.Format("<div class=\"{0}\"><ul>", this.CssClass);
647             if (CurrentPageIndex == 1)
648             {
649                 Text += string.Format("<li class='first0'>{0}</li>", FirstName);
650             }
651             else
652             {
653                 Text += string.Format("<li class='first'><a href=\"javascript:{0}\">{1}</a></li>", Page.GetPostBackEventReference(this, "top"), FirstName);
654             }
655 
656             if (CurrentPageIndex > 1)
657             {
658                 Text += string.Format("<li class='pre'><a href=\"javascript:{0}\">{1}</a></li>", Page.GetPostBackEventReference(this, "pre"), PreName);
659             }
660             else
661             {
662                 Text += string.Format("<li class='pre0'>{0}</li>", PreName);
663             }
664 
665             Text += "$Pagestring$";
666 
667             if (CurrentPageIndex < (TotalCount + PageSize - 1) / PageSize)
668             {
669                 Text += string.Format("<li class='next'><a href=\"javascript:{0}\">{1}</a></li>", Page.GetPostBackEventReference(this, "next"), NextName);
670             }
671             else
672             {
673                 Text += string.Format("<li class='next0'>{0}</li>", NextName);
674             }
675 
676 
677             if (CurrentPageIndex == (TotalCount + PageSize - 1) / PageSize)
678             {
679                 Text += string.Format("<li class='last0'>{0}</li>", LastName);
680             }
681             else
682             {
683                 if (TotalCount < PageSize || TotalCount == PageSize)
684                 {
685                     Text += string.Format("<li class='last0'>{0}</li>", LastName);
686                 }
687                 else
688                 {
689                     Text += string.Format("<li class='last'><a href=\"javascript:{0}\">{1}</a></li>", Page.GetPostBackEventReference(this, "last"), LastName);
690                 }
691             }
692 
693             if (DisplayPageInfo)
694             {
695                 Text += string.Format("<li class=\"summary\">當前 {0}/{1} 頁</li>", CurrentPageIndex, TotalCount / PageSize + (TotalCount % PageSize > 0 ? 1 : 0));
696             }
697             Text += "</ul></div><input type = hidden name =" + this.UniqueID + " value = " + this.CurrentPageIndex + "|" + this.CurrentPagesIndex + ">";
698 
699             //替換頁碼部分 
700             Text = Text.Replace("$Pagestring$", Pagestring);
701             if (TotalCount == 0)
702             {
703                 output.Write("");
704             }
705             else
706             {
707                 output.Write(Text);
708             }
709         }
710         */
711         # endregion
712         # endregion
713 
714         # region << Helpler >>
715 
716         ///<summary> 
717         ///判斷是否為數字字符串 
718         ///</summary> 
719         ///<param name="str">需驗證的字符串</param> 
720         ///<returns>判斷結果,符合條件為True,不符合條件為False</returns> 
721         private bool IsNumeric(string str)
722         {
723 
724             //判斷是否為空 
725             if (str == null || str.Length == 0)
726             {
727                 return false;
728             }
729 
730             //循環檢查每個字符 
731             foreach (char c in str)
732             {
733                 if (!Char.IsNumber(c))
734                 {
735                     return false;
736                 }
737             }
738             return true;
739         }
740 
741         ///<summary> 
742         ///判斷是否為數字字符串 
743         ///</summary> 
744         ///<param name="obj">需驗證的字符串</param> 
745         ///<returns>判斷結果,符合條件為True,不符合條件為False</returns> 
746         private bool IsNumeric(object obj)
747         {
748             obj += "";
749             string str = obj.ToString();
750             //判斷是否為空 
751             if (str == null || str.Length == 0)
752             {
753                 return false;
754             }
755 
756             //循環檢查每個字符 
757             foreach (char c in str)
758             {
759                 if (!Char.IsNumber(c))
760                 {
761                     return false;
762                 }
763 
764             }
765             return true;
766         }
767         # endregion
768 
769         #region ICallbackEventHandler 成員
770         /// <summary>
771         /// 
772         /// </summary>
773         /// <param name="pageIndex"></param>
774         public void RaiseCallbackEvent(string pageIndex)
775         {
776             int currentPageIndex = int.Parse(pageIndex);
777 
778             if (currentPageIndex != CurrentPageIndex)
779             {
780                 PageChangedEventArgs ev = new PageChangedEventArgs();
781                 ev.NewPageIndex = int.Parse(pageIndex);
782 
783                 OnPageIndexChanged(this, ev);
784             }
785             CurrentPageIndex = currentPageIndex;
786         }
787 
788         /// <summary>
789         /// 
790         /// </summary>
791         private void RegisterClientScripts()
792         {
793             string turnPageScript = "function turnPage(pageIndex) { CallServer(pageIndex);}";
794             string receiveCallBackScript = "function ReceiveCallback(arg,context){ document.getElementById(context).innerHTML = arg; }";
795             string callbackReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveCallback", this.ClientID, false);
796 
797             Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ClientID + "TurnPageScript", turnPageScript, true);
798             Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ClientID + "ReceiveCallBackScript", receiveCallBackScript, true);
799             Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ClientID + "CallServer", string.Format("function CallServer(arg,context){{ {0} }}", callbackReference), true);
800         }
801         #endregion
802 
803         #region IPostBackDataHandler 成員
804 
805         /// <summary>
806         /// 
807         /// </summary>
808         public void RaisePostDataChangedEvent()
809         {
810         }
811 
812         #endregion
813     }
814 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 
 6 namespace WebApplication1
 7 {
 8     public class CommonBind
 9     {
10         public static void BindPageNavigation(OsPageNavigation pageNav, int pageSize, int recordCount, int pageIndex)
11         {
12             pageNav.PageSize = pageSize;
13             pageNav.RecordCount = recordCount;
14             pageNav.CurrentPageIndex = pageIndex;
15 
16             //注意區分CurrentPageIndex和CurrentPagesIndex(多了個“s”)
17             if (pageNav.CurrentPageIndex == 1)
18                 pageNav.CurrentPagesIndex = 0;
19         }
20     }
21 }
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!--
 3   有關如何配置 ASP.NET 應用程序的詳細信息,請訪問
 4   http://go.microsoft.com/fwlink/?LinkId=169433
 5   -->
 6 <configuration>
 7   <configSections>
 8     <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
 9     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
10     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
11   </configSections>
12   <connectionStrings>
13     <add name="Test1" connectionString="Data Source=192.168.1.100;Initial Catalog=Test1;User Id=sa;Password=password01!;" providerName="System.Data.SqlClient"/>
14     <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-WebApplication1-20140422093630;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-WebApplication1-20140422093630.mdf" />
15   </connectionStrings>
16   <appSettings>
17     <add key="EnvironAttachment" value="E:\hbwj\hbwj\flfg\"></add>
18   </appSettings>
19   <SubSonicService defaultProvider="Test1">
20     <providers>
21 
22       <add name="Test1" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="Test1" generatedNamespace="Oceansoft.Net" maxPoolSize="2000"/>
23 
24     </providers>
25   </SubSonicService>
26   <system.web>
27     <pages>
28       <controls>
29         <add tagPrefix="webdiyer" assembly="AspNetPager" namespace="Wuqi.Webdiyer"/>
30         <add tagPrefix="oswc" assembly="WebApplication1" namespace="WebApplication1"/>
31      
32       </controls>
33 
34     </pages>
35     <compilation debug="true" targetFramework="4.0" />
36     <authentication mode="Forms">
37       <forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="~/" />
38     </authentication>
39     <profile defaultProvider="DefaultProfileProvider">
40       <providers>
41         <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
42       </providers>
43     </profile>
44     <membership defaultProvider="DefaultMembershipProvider">
45       <providers>
46         <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
47       </providers>
48     </membership>
49     <roleManager defaultProvider="DefaultRoleProvider">
50       <providers>
51         <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
52       </providers>
53     </roleManager>
54     <!--
55             If you are deploying to a cloud environment that has multiple web server instances,
56             you should change session state mode from "InProc" to "Custom". In addition,
57             change the connection string named "DefaultConnection" to connect to an instance
58             of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.
59       -->
60     <sessionState mode="InProc" customProvider="DefaultSessionProvider">
61       <providers>
62         <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
63       </providers>
64     </sessionState>
65   </system.web>
66   <system.webServer>
67     <modules runAllManagedModulesForAllRequests="true" />
68   </system.webServer>
69   <runtime>
70     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
71       <dependentAssembly>
72         <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
73         <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
74       </dependentAssembly>
75       <dependentAssembly>
76         <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
77         <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
78       </dependentAssembly>
79     </assemblyBinding>
80   </runtime>
81   <entityFramework>
82     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
83   </entityFramework>
84 </configuration>

BLL 文件下的兩個類:PagingEntity,PagingEntity_CusMS

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 namespace Oceansoft.Net.Bll.Common
  7 {
  8     public class PagingEntity
  9     {
 10 
 11 
 12         /// <summary>
 13         /// 頁碼
 14         /// </summary>
 15         public int PageIndex { get; set; }
 16 
 17         /// <summary>
 18         /// 總記錄數
 19         /// </summary>
 20         public int TotalRecords { get; set; }
 21 
 22         private List<string> _SortExpress = new List<string>();
 23 
 24         /// <summary>
 25         /// 排序集合
 26         /// </summary>
 27         public List<string> SortExpress
 28         {
 29             get { return this._SortExpress; }
 30             set { this._SortExpress = value; }
 31         }
 32 
 33 
 34         private Dictionary<string, string> _filter = new Dictionary<string, string>();
 35         /// <summary>
 36         /// 條件集合
 37         /// </summary>
 38         public Dictionary<string, string> Filter
 39         {
 40             get { return this._filter; }
 41             set { this._filter = value; }
 42         }
 43 
 44 
 45         /// <summary>
 46         /// 頁大小
 47         /// </summary>
 48         public int PageSize { get; set; }
 49 
 50 
 51         private List<string> _Paras = new List<string>();
 52 
 53         /// <summary>
 54         /// oracle查詢參數
 55         /// </summary>
 56         public List<string> Paras
 57         {
 58             get { return this._Paras; }
 59             set { this._Paras = value; }
 60         }
 61 
 62         /// <summary>
 63         /// 獲取單一值
 64         /// </summary>
 65         /// <param name="strSql"></param>
 66         /// <returns></returns>
 67         public virtual object GetSingle(string strSql)
 68         {
 69             return DB.Query().ExecuteScalar<object>(strSql, Paras.ToArray());
 70         }
 71 
 72 
 73 
 74         //     
 75 
 76 
 77 
 78         /// <summary>
 79         /// 獲取分頁sql語句Oracle
 80         /// </summary>
 81         /// <returns></returns>
 82         public string GetPagingSql_Orcle(string sqlText)
 83         {
 84             int PageIndex = 0;
 85             PageIndex = this.PageIndex;
 86             // 計算分頁大小,和分頁數
 87             string sqlTextCount = string.Format("select count(1) from ({0}) t", sqlText);
 88             this.TotalRecords = Convert.ToInt32(GetSingle(sqlTextCount));
 89 
 90 
 91 
 92             string sqlTextRecord = @"select * from (
 93                                     select TT1.*,rownum rn  from ({0} {1})                                    
 94                                     TT1 where rownum <={3}) tt2
 95                                      where rn >{2} ";
 96             string orderText = "";
 97             if (this.SortExpress.Count > 0)
 98             {
 99                 for (int i = 0; i < this.SortExpress.Count; i++)
100                 {
101                     if (!String.IsNullOrEmpty(this.SortExpress[i]))
102                     {
103                         if (this.SortExpress[i].ToLower().IndexOf("(none)") == -1)
104                         {
105                             if (orderText == "")
106                                 orderText = " order by " + this.SortExpress[i];
107                             else
108                                 orderText += "," + this.SortExpress[i];
109                         }
110                     }
111                 }
112             }
113             //起始頁為0
114             //sqlTextRecord = string.Format(sqlTextRecord,
115 
116             //    sqlText,
117             //    orderText,
118             //    PageIndex * this.PageSize,
119             //    (PageIndex + 1) * this.PageSize
120             //    );
121             //起始頁為1
122             PageIndex = PageIndex - 1;
123             sqlTextRecord = string.Format(sqlTextRecord,
124 
125                 sqlText,
126                 orderText,
127                 PageIndex * this.PageSize,
128                 (PageIndex + 1) * this.PageSize
129                 );
130             return sqlTextRecord;
131         }
132 
133 
134 
135         /// <summary>
136         /// 獲取分頁sql語句SQLServer
137         /// </summary>
138         /// <param name="sqlText"></param>
139         /// <returns></returns>
140         public string GetPagingSql_SQLServer(string sqlText)
141         {
142 
143             string sqlTextCount = string.Format("select count(1) from ({0}) t", sqlText);
144             TotalRecords = Convert.ToInt32(this.GetSingle(sqlTextCount));
145 
146             int PageIndex = 0;
147             PageIndex = this.PageIndex;
148 
149             string orderText = "";
150             if (this.SortExpress.Count > 0)
151             {
152                 for (int i = 0; i < this.SortExpress.Count; i++)
153                 {
154                     if (!String.IsNullOrEmpty(this.SortExpress[i]))
155                     {
156                         if (this.SortExpress[i].ToLower().IndexOf("(none)") == -1)
157                         {
158                             if (orderText == "")
159                                 orderText = "  " + this.SortExpress[i];
160                             else
161                                 orderText += "," + this.SortExpress[i];
162                         }
163                     }
164                 }
165             }
166             if (string.IsNullOrEmpty(orderText))
167                 orderText = "Guid";
168             PageIndex = PageIndex - 1;
169             string sqlTextRecord = string.Format("select * from  (select (ROW_NUMBER() OVER(ORDER BY {1})) as rownumber, TT1.* from ({0}) TT1 ) B where rownumber > {2} and rownumber <= {3} order by {1}",
170                 sqlText,
171                 orderText,
172                 PageIndex * PageSize,
173                 (PageIndex + 1) * PageSize
174                 );
175             return sqlTextRecord;
176         }
177 
178         /// <summary>
179         /// 獲取sql語句SQLServer(無分頁)
180         /// </summary>
181         /// <param name="sqlText"></param>
182         /// <returns></returns>
183         public string GetPagingSql_SQLServerEs(string sqlText)
184         {
185 
186             string sqlTextCount = string.Format("select count(1) from ({0}) t", sqlText);
187             TotalRecords = Convert.ToInt32(this.GetSingle(sqlTextCount));
188 
189             int PageIndex = 0;
190             PageIndex = this.PageIndex;
191 
192             string orderText = "";
193             if (this.SortExpress.Count > 0)
194             {
195                 for (int i = 0; i < this.SortExpress.Count; i++)
196                 {
197                     if (!String.IsNullOrEmpty(this.SortExpress[i]))
198                     {
199                         if (this.SortExpress[i].ToLower().IndexOf("(none)") == -1)
200                         {
201                             if (orderText == "")
202                                 orderText = "  " + this.SortExpress[i];
203                             else
204                                 orderText += "," + this.SortExpress[i];
205                         }
206                     }
207                 }
208             }
209             if (string.IsNullOrEmpty(orderText))
210                 orderText = "Guid";
211             PageIndex = PageIndex - 1;
212             string sqlTextRecord = string.Format("select * from  (select (ROW_NUMBER() OVER(ORDER BY {1})) as rownumber, TT1.* from ({0}) TT1 ) B order by {1}",
213                 sqlText,
214                 orderText
215               );
216             return sqlTextRecord;
217         }
218 
219     }
220 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace Oceansoft.Net.Bll.Common
 7 {
 8     public class PagingEntity_CusMS:PagingEntity
 9     {
10         public override object GetSingle(string strSql)
11         {
12             return Oceansoft.Net.DB.Query().ExecuteScalar<object>(strSql, Paras.ToArray());
13         }
14     }
15 }

代碼下載: http://files.cnblogs.com/jbps/%E5%88%86%E9%A1%B5%E6%8E%A7%E4%BB%B6AspNetPager.rar

效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM