Jquery+Ajax+Json+存储过程实现高效分页
之前在做分页时,很多朋友都是用Jquery分页插件,之前我就用的jquery.paper,有需要的朋友可以联系我,接下来小编给大家分享用Jquery+Ajax+Json+存储过程实现高效分页。
实现此功能用分页存储过程,pagination,js样式,废话不多了,具体请看下面代码
分页存储过程:PAGINATION
CREATEPROCEDURE[dbo].[PAGINATION] @FEILDSVARCHAR(),--要显示的字段 @PAGE_INDEXINT,--当前页码 @PAGE_SIZEINT,--页面大小 @ORDERTYPEBIT,--当为时则为desc当为时asc @ANDWHEREVARCHAR()='',--where语句不用加where @ORDERFEILDVARCHAR(),--排序的字段 @TABLENAMEVARCHAR()--查询的表明 as DECLARE@EXECSQLVARCHAR() DECLARE@ORDERSTRVARCHAR() DECLARE@ORDERBYVARCHAR() BEGIN setNOCOUNTon IF@ORDERTYPE= BEGIN SET@ORDERSTR='>(SELECTMAX(['+@ORDERFEILD+'])' SET@ORDERBY='ORDERBY'+@ORDERFEILD+'ASC' END ELSE BEGIN SET@ORDERSTR='<(SELECTMIN(['+@ORDERFEILD+'])' SET@ORDERBY='ORDERBY'+@ORDERFEILD+'DESC' END IF@PAGE_INDEX=--当页码是第一页时直接运行,提高速度 BEGIN IF@ANDWHERE='' SET@EXECSQL='SELECTTOP'+STR(@PAGE_SIZE)+''+@FEILDS+'FROM'+@TABLENAME+''+@ORDERBY ELSE SET@EXECSQL='SELECTTOP'+STR(@PAGE_SIZE)+''+@FEILDS+'FROM'+@TABLENAME+'WHERE'+@ANDWHERE+''+@ORDERBY END ELSE BEGIN IF@ANDWHERE='' BEGIN--以子查询结果当做新表时要给表名别名才能用 SET@EXECSQL='SELECTTOP'+STR(@PAGE_SIZE)+''+@FEILDS+'FROM'+@TABLENAME+'WHERE'+@ORDERFEILD+ @ORDERSTR+'FROM(SELECTTOP'+STR(@PAGE_SIZE*(@PAGE_INDEX-))+''+@ORDERFEILD+ 'FROM'+@TABLENAME+''+@ORDERBY+')ASTEMP)'+@ORDERBY END ELSE BEGIN SET@EXECSQL='SELECTTOP'+STR(@PAGE_SIZE)+''+@FEILDS+'FROM'+@TABLENAME+'WHERE'+@ORDERFEILD+ @ORDERSTR+'FROM(SELECTTOP'+STR(@PAGE_SIZE*(@PAGE_INDEX-))+''+@ORDERFEILD+ 'FROM'+@TABLENAME+'WHERE'+@ANDWHERE+''+@ORDERBY+')ASTEMP)AND'+@ANDWHERE+''+@ORDERBY END END EXEC(@EXECSQL)--这里要加括号 END
分页样式:
<styletype="text/css">
a,area{-moz-outline-style:none;blr:expression(this.onFocus=this.blur());text-decoration:none}
div.badoo{padding:px;text-align:center;}
div.badooa{border:pxsolid#ededed;padding:pxpx;color:#;border-radius:px;margin-right:px;}
div.badooa:hover{border:pxsolid#ffa;color:#ffa;}
div.badooa:active{border:pxsolid#ffa;margin-right:px;}
div.badoospan{border:pxsolid#EDEDED;padding:pxpx;color:#f;font-weight:bold;background:#FAFAFA;border-radius:px;margin-right:px;}
div.badoospan.disabled{border:pxsolid#EDEDED;padding:pxpx;color:#;margin-right:px;font-weight:;}
</style>
首先创建一般处理程序,读取数据库中内容,得到返回值.
创建文件,GetData.ashx.
我这里是用的存储过程,存储过程会再下面粘出来,至于数据只是实例,你们可根据需求自行读取数据
usingSystem;
usingSystem.Web;
usingSystem.Data.SqlClient;
usingSystem.Data;
usingSystem.Collections.Generic;
usingSystem.Web.Script.Serialization;
usingModel;
context.Response.ContentType="text/plain";
varpageIndex=context.Request["PageIndex"];
//判断当前索引存不存在,如果不存在则获取记录的总数。
if(string.IsNullOrEmpty(pageIndex))
{
//获取查询记录总数的sql语句
intcount=;
int.TryParse(newBLL.t_profit().SelectAllNum(),outcount);
context.Response.Write(count);
context.Response.End();
}
//当根据索引获取数据
else
{
intcurrentPageIndex=;
int.TryParse(pageIndex,outcurrentPageIndex);
SqlParameter[]parms=newSqlParameter[]{
newSqlParameter("@FEILDS",SqlDbType.NVarChar,),
newSqlParameter("@PAGE_INDEX",SqlDbType.Int,),
newSqlParameter("@PAGE_SIZE",SqlDbType.Int,),
newSqlParameter("@ORDERTYPE",SqlDbType.Int,),
newSqlParameter("@ANDWHERE",SqlDbType.VarChar,),
newSqlParameter("@ORDERFEILD",SqlDbType.VarChar,)
};
parms[].Value="id,name,sex,tel";//获取所有的字段
parms[].Value=pageIndex;//当前页面索引
parms[].Value=;//页面大小
parms[].Value=;//升序排列
parms[].Value="";//条件语句
parms[].Value="id";//排序字段
List<Book>list=newList<Book>();
using(SqlDataReadersdr=Yoodor.DAL.SqlHelper.ExecuteReader(CommandType.StoredProcedure,"PAGINATION",parms))
{
while(sdr.Read())
{
list.Add(newBook{id=sdr[].ToString(),name=sdr[].ToString(),sex=sdr[].ToString(),tel=sdr[].ToString()});
}
}
context.Response.Write(newJavaScriptSerializer().Serialize(list).ToString());//转为Json格式
}
publicstringid{get;set;}
publicstringname{get;set;}
publicstringsex{get;set;}
publicstringtel{get;set;}
样式代码:
<styletype="text/css">
a,area{-moz-outline-style:none;blr:expression(this.onFocus=this.blur());text-decoration:none}
div.badoo{padding:px;text-align:center;}
div.badooa{border:pxsolid#ededed;padding:pxpx;color:#;border-radius:px;margin-right:px;}
div.badooa:hover{border:pxsolid#ffa;color:#ffa;}
div.badooa:active{border:pxsolid#ffa;margin-right:px;}
div.badoospan{border:pxsolid#EDEDED;padding:pxpx;color:#f;font-weight:bold;background:#FAFAFA;border-radius:px;margin-right:px;}
div.badoospan.disabled{border:pxsolid#EDEDED;padding:pxpx;color:#;margin-right:px;font-weight:;}
</style>
js代码
<scripttype="text/javascript">
$(function(){
$.post("GetData.ashx",null,function(data){
vartotal=data;
PageClick(,total,);
});
PageClick=function(pageIndex,total,spanInterval){
$.ajax({
url:"GetData.ashx",
data:{"PageIndex":pageIndex},
type:"post",
dataType:"json",
success:function(data){
//索引从开始
//将当前页索引转为int类型
varintPageIndex=parseInt(pageIndex);
//获取显示数据的表格
vartable=$("#content");
//清楚表格中内容
$("#contenttr").remove();
//向表格中添加内容
for(vari=;i<data.length;i++){
table.append(
$("<tr><td>"+
data[i].id
+"</td><td>"+
data[i].name
+"</td><td>"+
data[i].sex
+"</td><td>"+
data[i].tel
+"</td></tr>")
);
}//for
//创建分页
//将总记录数结果得到总页码数
varpageS=total
if(pageS%==)pageS=pageS/;
elsepageS=parseInt(total/)+;
var$pager=$("#pager");
//清楚分页div中的内容
$("#pagerspan").remove();
$("#pagera").remove();
//添加第一页
if(intPageIndex==){
//$pager.append("<spanclass='disabled'>第一页</span>");
}
else{
//varfirst=$("<ahref='javascript:void()'first='"++"'>第一页</a>").click(function(){
//PageClick($(this).attr('first'),total,spanInterval);
//returnfalse;
//});
//$pager.append(first);
}
//添加上一页
if(intPageIndex==)
$pager.append("<spanclass='disabled'>上一页</span>");
else{
varpre=$("<ahref='javascript:void()'pre='"+(intPageIndex-)+"'>上一页</a>").click(function(){
PageClick($(this).attr('pre'),total,spanInterval);
returnfalse;
});
$pager.append(pre);
}
//设置分页的格式这里可以根据需求完成自己想要的结果
varinterval=parseInt(spanInterval);//设置间隔
varstart=Math.max(,intPageIndex-interval);//设置起始页
varend=Math.min(intPageIndex+interval,pageS)//设置末页
if(intPageIndex<interval+){
end=(*interval+)>pageS?pageS:(*interval+);
}
if((intPageIndex+interval)>pageS){
start=(pageS-*interval)<?:(pageS-*interval);
}
//生成页码
for(varj=start;j<end+;j++){
if(j==intPageIndex){
varspanSelectd=$("<spanclass='current'>"+j+"</span>");
$pager.append(spanSelectd);
}//if
else{
vara=$("<ahref='javascript:void()'>"+j+"</a>").click(function(){
PageClick($(this).text(),total,spanInterval);
returnfalse;
});
$pager.append(a);
}//else
}//for
//上一页
if(intPageIndex==Math.ceil(total/)){
$pager.append("<spanclass='disabled'>下一页</span>");
}
else{
varnext=$("<ahref='javascript:void()'next='"+(intPageIndex+)+"'>下一页</a>").click(function(){
PageClick($(this).attr("next"),total,spanInterval);
returnfalse;
});
$pager.append(next);
}
//最后一页
if(intPageIndex==pageS){
//$pager.append("<spanclass='disabled'>最后一页</span>");
}
else{
//varlast=$("<ahref='javascript:void()'last='"+pageS+"'>最后一页</a>").click(function(){
//PageClick($(this).attr("last"),total,spanInterval);
//returnfalse;
//});
//$pager.append(last);
}
}//sucess
});//ajax
};//function
});//ready
</script>
<tableid="content">
</table>
<divid="pager"class="badoo"></div>
///<summary>
///ExecuteaSqlCommandthatreturnsaresultsetagainstthedatabasespecifiedintheconnectionstring
///usingtheprovidedparameters.
///</summary>
///<paramname="connectionString">一个有效的数据库连接字符串</param>
///<paramname="cmdType">SqlCommand命令类型(存储过程,T-SQL语句,等等。)</param>
///<paramname="cmdText">存储过程的名字或者T-SQL语句</param>
///<paramname="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
///<returns>ASqlDataReadercontainingtheresults</returns>
publicstaticSqlDataReaderExecuteReader(CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)
{
SqlCommandcmd=newSqlCommand();
SqlConnectionconn=newSqlConnection(connectionString);
//weuseatry/catchherebecauseifthemethodthrowsanexceptionwewantto
//closetheconnectionthrowcode,becausenodatareaderwillexist,hencethe
//commandBehaviour.CloseConnectionwillnotwork
try
{
PrepareCommand(cmd,conn,null,cmdType,cmdText,commandParameters);
SqlDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
returnrdr;
}
catch(Exceptionex)
{
conn.Close();
thrownewException(ex.Message);
}
}
以上就是本文使用Jquery+Ajax+Json+存储过程实现高效分页的全部内容,希望大家喜欢。