Ajax自定义无刷新控件实现

先给出本人在实例中的代码下载,供各种鸟们使用,大鸟们也可以绕过:
下载地址,点击即可下载:https://files.cnblogs.com/learnyou/ajaxpage.rar

下面说说该自定义无刷新分页控件原理:
      使用工具:Access + VS2008
      为了方便大家直接使用,源码中是使用了Access文件数据库的,下载源码后直接简单修改下代码中数据库路径就可以运行了。

      使用框架:Ajax,是我是我还是我,还是Ajax实现的无刷新,但是本实例中,本人对相关控件的封装,个人觉得使用还是挺方便、挺简单。

下面给出运行页面的效果图:

      数据库是使用的Access数据库,表很简单,就是一个学生表(students),该表就是三列,很简单的数据结构,在此就不贴出截图了,大家可以直接用office打开源码中的数据库看看就是。

      下面给出核心代码,都是本人直接封装的,在App_Code文件夹的AjaxPager.cs文件中,也可以直接在下载的源码中查看,代码如下:

  1 using System;
  2 using System.Text;
  3 using System.Collections;
  4 using System.Collections.Generic;
  5 using System.Text.RegularExpressions;
  6 using System.IO;
  7 using System.Web.UI;
  8 using System.Globalization;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.HtmlControls;
 11 
 12 namespace Demo
 13 {
 14     public interface IPageIndexChangedEventHandler
 15     {
 16         void BindData(int pageIndex, int pageSize);
 17     }
 18 
 19     public class AjaxPager : Control, ICallbackEventHandler, INamingContainer
 20     {
 21         #region Member Variables
 22 
 23         private int lowerBound;
 24         private int upperBound;
 25         private HyperLink previousLink;
 26         private HyperLink nextLink;
 27         private HyperLink firstLink;
 28         private HyperLink lastLink;
 29         private Control targetControl;
 30 
 31         #endregion
 32 
 33         #region Public Properties
 34 
 35         public int PageIndex
 36         {
 37             get
 38             {
 39                 int pageIndex = 1;
 40                 if (Page != null && Page.IsPostBack && ViewState["PageIndex"] != null)
 41                 {
 42                     pageIndex = (int)ViewState["PageIndex"];
 43                 }
 44                 if (pageIndex < 1)
 45                 {
 46                     return 1;
 47                 }
 48                 else
 49                 {
 50                     return pageIndex;
 51                 }
 52             }
 53             set
 54             {
 55                 ViewState["PageIndex"] = value;
 56             }
 57         }
 58         public int PageSize
 59         {
 60             get
 61             {
 62                 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
 63                 if (pageSize <= 0)
 64                 {
 65                     return 10;
 66                 }
 67                 return pageSize;
 68             }
 69             set
 70             {
 71                 ViewState["PageSize"] = value;
 72             }
 73         }
 74         public int LeftLength
 75         {
 76             get
 77             {
 78                 return PageLength / 2;
 79             }
 80         }
 81         public int RightLength
 82         {
 83             get
 84             {
 85                 return PageLength / 2;
 86             }
 87         }
 88         public int PageLength
 89         {
 90             get
 91             {
 92                 int pageLength = Convert.ToInt32(ViewState["PageLength"]);
 93 
 94                 if (pageLength <= 3)
 95                     return 3;
 96 
 97                 if (pageLength % 2 == 0)
 98                 {
 99                     return pageLength + 1;
100                 }
101 
102                 return pageLength;
103             }
104             set
105             {
106                 ViewState["PageLength"] = value;
107             }
108 
109         }
110         public int TotalPages
111         {
112             get
113             {
114                 return CalculateTotalPages(TotalRecords);
115             }
116         }
117         public int TotalRecords
118         {
119             get
120             {
121                 return Convert.ToInt32(ViewState["TotalRecords"]);
122             }
123             set
124             {
125                 ViewState["TotalRecords"] = value;
126             }
127         }
128         public string DataWrapperID
129         {
130             get
131             {
132                 string s = ViewState["DataWrapperID"] as string;
133                 if (s == null)
134                 {
135                     s = string.Empty;
136                 }
137                 return s;
138             }
139             set
140             {
141                 ViewState["DataWrapperID"] = value;
142             }
143         }
144         public string TargetControlID
145         {
146             get
147             {
148                 string s = ViewState["TargetControlID"] as string;
149                 if (s == null)
150                 {
151                     s = string.Empty;
152                 }
153                 return s;
154             }
155             set
156             {
157                 ViewState["TargetControlID"] = value;
158             }
159         }
160 
161         #endregion
162 
163         #region Overrides Methods
164 
165         protected override void OnLoad(EventArgs e)
166         {
167             if (!Page.IsPostBack)
168             {
169                 CreatePageLinks();
170                 RegisterClientScripts();
171             }
172             else
173             {
174                 targetControl = FindControl(this, TargetControlID);
175             }
176         }
177         protected override void Render(HtmlTextWriter writer)
178         {
179             if (TotalPages <= 1)
180             {
181                 return;
182             }
183             RenderFirst(writer);
184             RenderPrevious(writer);
185             RenderPagingButtons(writer);
186             RenderNext(writer);
187             RenderLast(writer);
188         }
189 
190         #endregion
191 
192         #region Public Methods
193 
194         public virtual int CalculateTotalPages(int totalRecords)
195         {
196             int totalPagesAvailable;
197 
198             if (totalRecords == 0)
199             {
200                 return 0;
201             }
202 
203             totalPagesAvailable = totalRecords / PageSize;
204 
205             if ((totalRecords % PageSize) > 0)
206             {
207                 totalPagesAvailable++;
208             }
209 
210             return totalPagesAvailable;
211 
212         }
213 
214         #endregion
215 
216     }
217 }

      好了,基本就是这么多,源码在文章开头部分,可以直接down下来看看就是。本人觉得这种封装方式实现效果还行,当前项目中就有应用,大家可以看看效果,见网址:http://www.bjp111.com

      源码较多,本人只贴出了一部分,还请大家见谅,更多部分可以直接下载源码,VS打开就是,里面很清楚。
就先到这里,大家有什么问题可以直接留言交流。

原文地址:https://www.cnblogs.com/learnyou/p/2989015.html