Ajax自定义无刷新控件实现

前端之家收集整理的这篇文章主要介绍了Ajax自定义无刷新控件实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

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

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

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

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

猜你在找的Ajax相关文章