Asp.Net分页方法:JQuery插件实现Ajax无刷新分页、AspNetPager分页控件实现分页
2011-12-09 15:55
477 查看
一、使用JQuery插件pagination实现AJax无刷新分页:
以下只列出主要代码及注释,详细请参考最后源码:
我们需要用到的文件有:jquery.js,jquery.pagination.js,pagination.css
以及用于将DataTable转换为Json的插件Newtonsoft.Json.Net20.dll,文件在包含在最下面的源文件中
分页存储过程:
数据访问层主要函数:取出分页数据及计算总条数(主要看传的什么参数即可)
下面为主要代码:
1、页面引入JS及CSS
2、页面Html代码
3、一般处理程序页面GetNewsList.ashx,根据条件取出分页数据及总条数
DataTable转换为Json的函数
4、★主要的JS代码:(Ajax取出分页数据、总条数、绑定分页控件,讲分页数据HTML输出到前台)
实例完整源码:源码与上面所写稍有不同
jQueryPager(JQuery分页插件pagination实现Ajax分页).rar
二、使用aspnetpager分页控件实现分页:
控件下载及演示地址:http://www.webdiyer.com/
存储过程和数据访问层所用的代码和上面的一样
1、添加AspNetPager控件到Vs控件工具箱,方便以后随时调用(如这里添加到“常规”一栏)
点击“常规”→右键“选择项”→“.NetFramework组件”→“浏览”→选择下载文件中的“AspNetPager.dll”
添加成功就会在常规工具箱出现“AspNetPager”控件了
2、引用AspNetPager控件(方法和其他一样,拖动到指定位置即可)
讲分页控件拖动到页面时头部就会自动添加
<%@RegisterAssembly="AspNetPager"Namespace="Wuqi.Webdiyer"TagPrefix="webdiyer"%>
分页区域,控件代码:(可在属性栏设置相应属性)
3、显示分页数据
这里用repeater绑定数据
后台.cs代码
A:分页之前必须计算数据总条数,并赋值给AspNetPager的RecordCount属性
B:将分页控件的PageSize(页大小)属性、CurrentPageIndex(当前页索引)属性,传递给提取分页数据的函数
C:设置分页控件的onpagechanged事件,即当页码改变时,重新绑定分页数据列表
以下只列出主要代码及注释,详细请参考最后源码:
我们需要用到的文件有:jquery.js,jquery.pagination.js,pagination.css
以及用于将DataTable转换为Json的插件Newtonsoft.Json.Net20.dll,文件在包含在最下面的源文件中
分页存储过程:
SET ANSI_NULLS ON |
GO |
SET QUOTED_IDENTIFIER ON |
GO |
--============================================= |
--Author:余泳彬 |
--Createdate:2011-01-1512:59 |
--Description:分页,用到了ROW_NUMBER() |
--============================================= |
create PROCEDURE [dbo].[proc_FenYe] |
@tblName varchar (255), --表名 |
@strFields varchar (1000)= '*' , --需要返回的列,默认* |
@strOrder varchar (255)= '' , --排序的字段名,必填 |
@strOrderType varchar (10)= 'ASC' , --排序的方式,默认ASC |
@PageSize int =10, --页尺寸,默认10 |
@PageIndex int =1, --页码,默认1 |
@strWhere varchar (1500)= '' --查询条件(注意:不要加where) |
AS |
declare @strSQL varchar (5000) |
if@strWhere!= '' |
set @strWhere= 'where' +@strWhere |
set @strSQL= |
'SELECT*FROM(' + |
'SELECTROW_NUMBER()OVER(ORDERBY' +@strOrder+ '' +@strOrderType+ ')ASpos,' +@strFields+ '' + |
'FROM' +@tblName+ '' +@strWhere+ |
')ASspWHEREposBETWEEN' +str((@PageIndex-1)*@PageSize+1)+ 'AND' +str(@PageIndex*@PageSize) |
exec (@strSQL) |
///<summary>分页获取数据列表(所有字段+类名)</summary> |
///<paramname="order">排序字段</param> |
///<paramname="ordertype">排序类型:desc或asc</param> |
///<paramname="PageSize">页大小</param> |
///<paramname="PageIndex">页索引</param> |
///<paramname="strWhere">条件</param> |
///<returns></returns> |
public DataSetGetList( string order, string ordertype, int PageSize, int PageIndex, string strWhere) |
{ |
Databasedb=DatabaseFactory.CreateDatabase(); |
DbCommanddbCommand=db.GetStoredProcCommand( "proc_FenYe" ); |
db.AddInParameter(dbCommand, "tblName" ,DbType.AnsiString, "News" ); |
db.AddInParameter(dbCommand, "strFields" ,DbType.AnsiString, "*" ); |
db.AddInParameter(dbCommand, "PageSize" ,DbType.Int32,PageSize); |
db.AddInParameter(dbCommand, "PageIndex" ,DbType.Int32,PageIndex); |
db.AddInParameter(dbCommand, "strOrder" ,DbType.String,order); |
db.AddInParameter(dbCommand, "strOrderType" ,DbType.String,ordertype); |
db.AddInParameter(dbCommand, "strWhere" ,DbType.AnsiString,strWhere); |
return db.ExecuteDataSet(dbCommand); |
} |
///<summary>计算记录数</summary> |
///<paramname="strWhere">条件</param> |
///<returns></returns> |
public int CalcCount( string strWhere) |
{ |
string sql= "selectcount(1)fromNews" ; |
if (! string .IsNullOrEmpty(strWhere)) |
{ |
sql+= "where" +strWhere; |
} |
Databasedb=DatabaseFactory.CreateDatabase(); |
DbCommanddbCommand=db.GetSqlStringCommand(sql); |
return int .Parse(db.ExecuteScalar(dbCommand).ToString()); |
} |
1、页面引入JS及CSS
< script src = "js/jquery-1.4.2.js" type = "text/javascript" ></ script > |
< script src = "js/jquery.pagination.js" type = "text/javascript" ></ script > |
< link href = "Css/pagination.css" rel = "stylesheet" type = "text/css" /> |
< script src = "js/NewsAjaxPager.js" type = "text/javascript" ></ script > |
<!--内容列表--!> |
< ul id = "PageContain" class = "newslist" > |
<!--加载图片--!> |
< li id = "loadImg" style = "width:100%;height:60px;text-align:center;margin-top:50px;" >< img src = "images/loading1.gif" ></ li > |
<!--内容会动态输出到这里面--!> |
</ ul > |
<!--页码,id不能改--!> |
< div id = "Pagination" class = "digg" ></ div > |
<%@WebHandlerLanguage= "C#" Class= "GetNewsList" %> |
using System; |
using System.Web; |
using System.Data; |
///<summary> |
///获取新闻列表,用于列表页AJAX分页及总条数 |
///</summary> |
public class GetNewsList:IHttpHandler |
{ |
DAl.NewsDAOnewsDao= new DAl.NewsDAO(); |
DAl.ProductCategoryDAOcatDao= new DAl.ProductCategoryDAO(); |
public void ProcessRequest(HttpContextcontext) |
{ |
context.Response.ContentType= "text/plain" ; |
string action=context.Request[ "action" ]; |
if (action== "pager" ) //取出分页列表 |
{ |
//排序字段 |
string order=context.Request[ "order" ].ToString().Trim(); |
string orderType=context.Request[ "orderType" ].ToString().Trim(); |
//页大小 |
string pageSizeStr=context.Request[ "pageSize" ].ToString().Trim(); |
int pageSize; |
int .TryParse(pageSizeStr, out pageSize); |
if (pageSize==0) |
{ |
pageSize=10; |
} |
//页索引 |
string pageIndexStr=context.Request[ "pageIndex" ].ToString().Trim(); |
int pageIndex; |
int .TryParse(pageIndexStr, out pageIndex); |
if (pageIndex==0) |
{ |
pageIndex=1; |
} |
//提取数据 |
DataTabledt=newsDao.GetList(order,orderType,pageSize,pageIndex,StrWhere(context)).Tables[0]; |
//讲DataTable转换为Json |
string jsonDate=Common.WebHelper.DataTableToJSON(dt, "ListData" ); |
context.Response.Write(jsonDate); |
} |
else if (action== "pageCount" ) //获取总条数 |
{ |
context.Response.Write(newsDao.CalcCount(StrWhere(context))); |
} |
} |
///<summary> |
///查询条件 |
///</summary> |
private string StrWhere(HttpContextcontext) |
{ |
string strWhere= "IsShow='1'" ; |
string Id=context.Request[ "cid" ].ToString().Trim(); |
if (! string .IsNullOrEmpty(Id)&&Common.WebHelper.IsPosInt(Id)) |
{ |
catDao.GetAllChildCatId(Id, ref Id); |
strWhere+= "andCategoryIDin(" +Id+ ")" ; //refId |
} |
return strWhere; |
} |
public bool IsReusable |
{ |
get |
{ |
return false ; |
} |
} |
} |
/* |
*创建人:余泳彬 |
*创建时间:2011-1-179:59:50 |
*说明:网站帮助类(常用通用类) |
*版权所有:余泳彬 |
*/ |
using System; |
using System.Collections.Generic; |
using System.Text; |
using System.Security.Cryptography; |
using System.Text.RegularExpressions; |
using System.Web; |
using System.Web.UI; |
using System.Web.UI.WebControls; |
using System.Data; |
using System.IO; |
using Newtonsoft.Json; //需先添加引用 |
namespace Common |
{ |
///<summary>网站帮助类</summary> |
public class WebHelper |
{ |
///<summary>将DateTable转为Json格式数据</summary> |
///<paramname="dt">要转换的DataTable名称</param> |
///<paramname="dtName">应该是转换后的Key如用Json.dtName得到数据</param> |
///<returns></returns> |
public static string DataTableToJSON(DataTabledt, string dtName) |
{ |
StringBuildersb= new StringBuilder(); |
StringWritersw= new StringWriter(sb); |
using (JsonWriterjw= new JsonTextWriter(sw)) |
{ |
JsonSerializerser= new JsonSerializer(); |
jw.WriteStartObject(); |
jw.WritePropertyName(dtName); |
jw.WriteStartArray(); |
foreach (DataRowdr in dt.Rows) |
{ |
jw.WriteStartObject(); |
foreach (DataColumndc in dt.Columns) |
{ |
jw.WritePropertyName(dc.ColumnName); |
ser.Serialize(jw,dr[dc].ToString()); |
} |
jw.WriteEndObject(); |
} |
jw.WriteEndArray(); |
jw.WriteEndObject(); |
sw.Close(); |
jw.Close(); |
} |
return sb.ToString(); |
} |
} |
} |
/* |
*余泳彬2011-3-22 |
*利用Jquery的jquery.pagination.js插件进行Ajax分页 |
*/ |
$( function (){ |
//获取Url中的类别ID参数(logcheck.js) |
var CatId=GetQueryString( "cid" ); |
//计算分页总条数 |
var pageCount=0; |
$.ajax({ |
type: "POST" , |
cache: false , |
async: false , |
dataType: "text" , |
url: "Handler/GetNewsList.ashx" , |
data: "action=pageCount&cid="
|
success: function (data){ |
pageCount=data; |
//alert(pageCount); |
} |
}); |
//初始化数据(显示第一页) |
InitData(CatId, "CreateDate" , "Desc" ,20,0,pageCount); |
//处理翻页,page_id为当前页索引(0为第一页) |
function pageselectCallback(page_id,jq){ |
//alert(page_id); |
InitData(CatId, "CreateDate" , "Desc" ,20,page_id,pageCount); |
} |
//★分页主函数(新闻类别ID,排序字段,排序类型,页大小,页索引,总条数) |
function InitData(CatId,order,ordertype,PageSize,pageindx,pageCount){ |
//Ajax取出分页列表数据 |
$.ajax({ |
type: "POST" , |
cache: false , |
dataType: "json" , //数据格式:JSON |
url: "Handler/GetNewsList.ashx" , |
data: "action=pager&cid="
"&order=" +order+ "&orderType=" +ordertype+ "&pageSize=" +PageSize+ "&pageIndex=" +(pageindx+1), |
//发送数据之前显示Loading图片,接收结束后隐藏 |
beforeSend: function (){$( "#loadImg" ).show();$( "#Pagination" ).hide()}, //发送数据之前 |
complete: function (){$( "#loadImg" ).hide();$( "#Pagination" ).show()}, //接收数据完毕 |
//Ajax成功 |
success: function (json){ |
var listDate=json.ListData; |
var html= "" ; |
$.each(listDate, function (i,n){ |
html+= "<liclass=\"b\"><spanclass=\"title\"><ahref=\"newscontent.aspx?id=" +n.Id+ "%>\"class=\"typelink\"target=\"_blank\">"
"</a></span><spanclass=\"date\">" +n.CreateDate+ "</span></li>" ; |
}); |
//输出HTML |
$( "#PageContain" ).html(html); |
} |
}); //Ajax_end |
//加入分页插件的绑定,第一个参数pageCount为总共多少条数据 |
$( "#Pagination" ).pagination(pageCount,{ |
callback:pageselectCallback, |
prev_text: '?上一页' , |
next_text: '下一页?' , |
items_per_page:PageSize, //每页显示条数 |
current_page:pageindx, //当前页索引,这里0为第一页 |
num_display_entries:6, //前面显示几个按钮 |
num_edge_entries:2 //后面显示几个按钮 |
}); |
} //InitData_fun_end |
}); //ready_end |
实例完整源码:源码与上面所写稍有不同
二、使用aspnetpager分页控件实现分页:
控件下载及演示地址:http://www.webdiyer.com/
存储过程和数据访问层所用的代码和上面的一样
1、添加AspNetPager控件到Vs控件工具箱,方便以后随时调用(如这里添加到“常规”一栏)
点击“常规”→右键“选择项”→“.NetFramework组件”→“浏览”→选择下载文件中的“AspNetPager.dll”
添加成功就会在常规工具箱出现“AspNetPager”控件了
2、引用AspNetPager控件(方法和其他一样,拖动到指定位置即可)
讲分页控件拖动到页面时头部就会自动添加
<%@RegisterAssembly="AspNetPager"Namespace="Wuqi.Webdiyer"TagPrefix="webdiyer"%>
分页区域,控件代码:(可在属性栏设置相应属性)
<webdiyer:aspnetpagerCssClass= "pages" CurrentPageButtonClass= "cpb" ID= "anp" |
runat= "server" |
CustomInfoHTML= "当前第%CurrentPageIndex%/%PageCount%页,每页%PageSize%条,共%RecordCount%条" |
FirstPageText= "|<<" LastPageText= ">>|" |
PageIndexBoxType= "TextBox" PageSize= "20" ShowCustomInfoSection= "Left" |
ShowPageIndexBox= "Never" NumericButtonCount= "5" |
LayoutType= "Div" CustomInfoClass= "pages_left" onpagechanged= "anp_PageChanged" |
CustomInfoSectionWidth= "40%" UrlPaging= "True" > |
</webdiyer:aspnetpager> |
这里用repeater绑定数据
<asp:RepeaterID= "repList" runat= "server" > |
<ItemTemplate> |
<li class = "b" > |
<span class = "title" > |
<ahref= "newscontent.aspx?id=<%#Eval(" Id ")%>" class = "typelink" target= "_blank" ><%#Eval( "LongTitle" )%></a></span> |
<span class = "date" ><%#Eval( "CreateDate" )%></span> |
</li> |
</ItemTemplate> |
</asp:Repeater> |
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Web; |
using System.Web.UI; |
using System.Web.UI.WebControls; |
public partial class newslist:System.Web.UI.Page |
{ |
DAl.NewsDAOnewsDao= new DAl.NewsDAO(); |
protected void Page_Load( object sender,EventArgse) |
{ |
if (!IsPostBack) |
{ |
//计算分页总条数 |
anp.RecordCount=newsDao.CalcCount( "" ); |
//绑定列表 |
repListBind(); |
} |
} |
///<summary>绑定列表数据</summary> |
private void repListBind() |
{ |
//绑定repeater |
repList.DataSource=newsDao.GetList( "CreateDate" , "desc" ,anp.PageSize,anp.CurrentPageIndex, "" ); |
repList.DataBind(); |
} |
//分页事件 |
protected void anp_PageChanged( object sender,EventArgse) |
{ |
repListBind(); |
} |
} |
B:将分页控件的PageSize(页大小)属性、CurrentPageIndex(当前页索引)属性,传递给提取分页数据的函数
C:设置分页控件的onpagechanged事件,即当页码改变时,重新绑定分页数据列表
相关文章推荐
- Asp.Net分页方法:JQuery插件实现Ajax无刷新分页、AspNetPager分页控件实现分页
- Asp.Net分页方法:JQuery插件实现Ajax无刷新分页、AspNetPager分页控件实现分页
- asp.net mvc基于jQuery+Ajax实现无刷新分页
- asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码
- 用jQuery实现asp.net 2.0 treeview控件完全无刷新操作实例(AJAX的增、删、改、选择以及展开收缩节点)
- asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
- asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
- asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码
- asp.net中利用Jquery+Ajax+Json实现无刷新分页
- asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
- asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
- asp.net中利用Jquery+Ajax+Json实现无刷新分页
- asp.net中利用Jquery+Ajax+Json实现无刷新分页
- Jquery+JSon实现的Asp.net无刷新分页控件
- Asp.net + jQuery + jQuery pager plugin + Sql Server 利用Ajax实现真正的无刷新分页浏览
- dhl:asp.net mvc下用jQuery ajax方法实现无刷新分页(用户控件)& 整体页面无刷新(2010-11-13 add)
- asp.net mvc基于jQuery+Ajax实现无刷新分页
- jquery实现ajax无刷新分页页码控件