.NET分页控件简单学习
这几天无意间看到一个关于分页的帖子,觉得写得挺好的。关于这些东西,自己一直都是只知道原理,却没有真正动手做过,于是研究了一下分页的原理自己动手写了一个十分特别非常简单的分页程序,在这里与大家分享一下。
这个程序取数据使用的ado.net,首先先新建一个取数据的类PageDAl
usingSystem; usingSystem.Collections.Generic; usingSystem.Configuration; usingSystem.Data; usingSystem.Data.Common; usingSystem.Data.SqlClient; usingSystem.Linq; usingSystem.Web; namespacepage.DAL { publicclassPageDal { publicDataTableGetUserList(outinttotalCount,intpageIndex=1,intpagesize=10) { using( SqlConnectioncoon= newSqlConnection(ConfigurationManager.ConnectionStrings["userConnection"].ConnectionString)) { coon.Open(); stringsqlCount="selectcount(F_Id)fromSys_User"; SqlCommandcmd=newSqlCommand(sqlCount,coon); totalCount=int.Parse(cmd.ExecuteScalar().ToString()); stringsql="selectF_Account,F_RealNamefrom(select*,Row_Number()over(orderbyF_Account)rfromSys_User)aswwherer>{0}andr<={1};"; SqlDataAdapterad=newSqlDataAdapter(String.Format(sql,(pageIndex-1)*pagesize,(pageIndex*pagesize)),coon); DataTabledt=newDataTable(); ad.Fill(dt); returndt; } } } }
然后记得修改一下webconfig里面的连接数据库的字符串,数据库自己随便建一个就行。
接下来是ashx一般处理程序,html页面把需求传过来,他在从PageDal中取数据。
usingpage.DAL; usingSystem; usingSystem.Collections.Generic; usingSystem.Data; usingSystem.Linq; usingSystem.Text; usingSystem.Web; namespacepage { ///<summary> ///WebHandler的摘要说明 ///</summary> publicclassWebHandler:IHttpHandler { publicvoidProcessRequest(HttpContextcontext) { try { intpageIndex=int.Parse(context.Request.Form["pageindex"]); intpageSize=int.Parse(context.Request.Form["pagesize"]); PageDalpd=newPageDal(); inttotalCount; DataTabledt=pd.GetUserList(outtotalCount,pageIndex,pageSize); stringjson=ToJson(dt,"data",totalCount); context.Response.ContentType="text/plain"; context.Response.Write(json); } catch { context.Response.Write("error"); } } publicboolIsReusable { get { returnfalse; } } ///<summary> ///DataTable转换为Json ///</summary> publicstaticstringToJson(DataTabledt,stringjsonName,intcount) { StringBuilderJson=newStringBuilder(); if(string.IsNullOrEmpty(jsonName)) jsonName=dt.TableName; Json.Append("{\""+jsonName+"\":["); if(dt.Rows.Count>0) { for(inti=0;i<dt.Rows.Count;i++) { Json.Append("{"); for(intj=0;j<dt.Columns.Count;j++) { Typetype=dt.Rows[i][j].GetType(); Json.Append("\""+dt.Columns[j].ColumnName.ToString()+"\":"+StringFormat(dt.Rows[i][j].ToString(),type)); if(j<dt.Columns.Count-1) { Json.Append(","); } } Json.Append("}"); if(i<dt.Rows.Count-1) { Json.Append(","); } } } Json.Append("],"); Json.Append("\"count\":"+count+"}"); returnJson.ToString(); } ///<summary> ///格式化字符型、日期型、布尔型 ///</summary> ///<paramname="str"></param> ///<paramname="type"></param> ///<returns></returns> privatestaticstringStringFormat(stringstr,Typetype) { if(type==typeof(string)) { str=String2Json(str); str="\""+str+"\""; } elseif(type==typeof(DateTime)) { str="\""+str+"\""; } elseif(type==typeof(bool)) { str=str.ToLower(); } elseif(type!=typeof(string)&&string.IsNullOrEmpty(str)) { str="\""+str+"\""; } returnstr; } ///<summary> ///过滤特殊字符 ///</summary> ///<paramname="s">字符串</param> ///<returns>json字符串</returns> privatestaticstringString2Json(Strings) { StringBuildersb=newStringBuilder(); for(inti=0;i<s.Length;i++) { charc=s.ToCharArray()[i]; switch(c) { case'\"': sb.Append("\\\"");break; case'\\': sb.Append("\\\\");break; case'/': sb.Append("\\/");break; case'\b': sb.Append("\\b");break; case'\f': sb.Append("\\f");break; case'\n': sb.Append("\\n");break; case'\r': sb.Append("\\r");break; case'\t': sb.Append("\\t");break; default: sb.Append(c);break; } } returnsb.ToString(); } } }
最后就是html代码了
<!DOCTYPEhtml> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <scriptsrc="../Content/jquery/jquery-1.11.1.min.js"></script> <title></title> </head> <body> <tableid="datatable"></table> <divid="pageination"style="width:100%"> <ahref="javascript:void(0);"onclick="GoFirst()">首页</a> <ahref="javascript:void(0);"onclick="GoPre()">上一页</a> <span>当前<inputid="pageindex"type="text"style="width:20px"value="1"disabled="disabled"/>页,总共<inputid="totalcount"type="text"style="width:20px"value=""disabled="disabled"/>条数据,共<inputid="pagecount"type="text"style="width:20px"value=""disabled="disabled"/>页</span> <ahref="javascript:void(0);"onclick="GoNext()">下一页</a> <ahref="javascript:void(0);"onclick="GoLast()">尾页</a> </div> </body> </html> <script> varpageindex=1; varpagesize=15; $(function(){ search(); }); functionsearch(){ $.ajax({ url:"../WebHandler.ashx", type:"post", data:{ "pagesize":pagesize, "pageindex":pageindex }, success:function(daa){ varjson=JSON.parse(daa); vartab=$("#datatable"); tab.empty(); for(vari=0;i<json.data.length;i++){ tab.append("<tr><td>"+ json.data[i].F_Account+ "</td><td>"+ json.data[i].F_RealName+ "</td></tr>"); } varcount=json.count; varpagecount=Math.ceil(count/pagesize); $("#totalcount").val(count); $("#pagecount").val(pagecount); } }); }; functionGoFirst(){ pageindex=1; $("#pageindex").val(pageindex); search(); }; functionGoLast(){ varpageindex=$("#pagecount").val(); $("#pageindex").val(pageindex); search(); }; functionGoPre(){ if(pageindex>1){ pageindex=pageindex-1; $("#pageindex").val(pageindex); search(); }else{ alert("这是第一页!"); } }; functionGoNext(){ varpagecount=$("#pagecount").val(); if(pageindex<pagecount){ pageindex=pageindex+1; $("#pageindex").val(pageindex); search(); }else{ alert("这是最后一页!"); } }; </script>
看完那篇帖子自己又对照的看了一下公司做的分页,总结了一下,以前都没认真想过关于分页的东西,觉得还挺难的,但经过一次总结发现其实只要你按顺序一点一点理清楚,有一个清晰的思路,完全不难的。
首先取数据,分两个部分,一个是把所有的数据个数统计出来另一个是取当前页码的数据,这个是很简单的,自己把有关的sql语句写好就行,sql语句的写法有很多,我取当前页码用的语句是
selectF_Account,F_RealNamefrom(select*,Row_Number()over(orderbyF_Account)rfromSys_User)aswwherer>(pageIndex-1)*pagesizeandr<=pageIndex*pagesize
数据取出来之后就是把页面栏拼好,并且把相关的方法写好,比如说首页,前一页,下一页,尾页等,之后把数据总数传过来,计算页数就OK了。
<divid="pageination"style="width:100%"> <ahref="javascript:void(0);"onclick="GoFirst()">首页</a> <ahref="javascript:void(0);"onclick="GoPre()">上一页</a> <span>当前<inputid="pageindex"type="text"style="width:20px"value="1"disabled="disabled"/>页,总共<inputid="totalcount"type="text"style="width:20px"value=""disabled="disabled"/>条数据,共<inputid="pagecount"type="text"style="width:20px"value=""disabled="disabled"/>页</span> <ahref="javascript:void(0);"onclick="GoNext()">下一页</a> <ahref="javascript:void(0);"onclick="GoLast()">尾页</a> </div> functionGoFirst(){ pageindex=1; $("#pageindex").val(pageindex); search(); }; functionGoLast(){ varpageindex=$("#pagecount").val(); $("#pageindex").val(pageindex); search(); }; functionGoPre(){ if(pageindex>1){ pageindex=pageindex-1; $("#pageindex").val(pageindex); search(); }else{ alert("这是第一页!"); } }; functionGoNext(){ varpagecount=$("#pagecount").val(); if(pageindex<pagecount){ pageindex=pageindex+1; $("#pageindex").val(pageindex); search(); }else{ alert("这是最后一页!"); } };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。