您的位置:首页 > Web前端 > JQuery

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,文件在包含在最下面的源文件中

分页存储过程:

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
>
2、页面Html代码

<!--内容列表--!>
<
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
>
3、一般处理程序页面GetNewsList.ashx,根据条件取出分页数据及总条数

<%@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
;
}
}
}
DataTable转换为Json的函数

/*
*创建人:余泳彬
*创建时间: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();
}
}
}
4、★主要的JS代码:(Ajax取出分页数据、总条数、绑定分页控件,讲分页数据HTML输出到前台)

/*
*余泳彬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="

+CatId,
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="

+CatId+
"&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\">"

+n.LongTitle+
"</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


实例完整源码:源码与上面所写稍有不同

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"%>

分页区域,控件代码:(可在属性栏设置相应属性)

<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>
3、显示分页数据

这里用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>
后台.cs代码

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();
}
}
A:分页之前必须计算数据总条数,并赋值给AspNetPager的RecordCount属性
B:将分页控件的PageSize(页大小)属性、CurrentPageIndex(当前页索引)属性,传递给提取分页数据的函数

C:设置分页控件的onpagechanged事件,即当页码改变时,重新绑定分页数据列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: