.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("这是最后一页!");
}
};
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。