先给出本人在实例中的代码下载,供各种鸟们使用,大鸟们也可以绕过:
下载地址,点击即可下载:http://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下来看看就是。本人觉得这种封装方式实现效果还行,当前项目中就有应用,大家可以看看效果,见网址:@L_404_1@
源码较多,本人只贴出了一部分,还请大家见谅,更多部分可以直接下载源码,VS打开就是,里面很清楚。就先到这里,大家有什么问题可以直接留言交流。