ASP.NET无刷新分页简单实现
下面就是和大家分享的实现无刷新分页功能的全部步骤,欢迎学习。
1、新建一个分页存储过程:
CREATEprocedure[dbo].[P_Pager] (@PageNumberint, @PageSizeint) as declare@sqlnvarchar(4000) set@sql='selecttop'+Convert(varchar,@PageSize)+'*fromT_Testwhere[type]=1andidnotin(selecttop'+Convert(varchar,(@PageNumber-1)*@PageSize)+'idfromT_Testorderbyiddesc)orderbyiddesc' execsp_executesql@sql GO
2、设置Ajax控件
想要实现无刷新,肯定会用到Ajax,首先是要放入必不可少的:
<asp:ScriptManagerID="ScriptManager1"runat="server">
</asp:ScriptManager>
接着把Repeater控件嵌入到UpdatePanel里面去:
<asp:UpdatePanelID="UpdatePanel1"runat="server">
<ContentTemplate>
<ul>
<asp:RepeaterID="Repeater1"runat="server">
<ItemTemplate>
<li>
<p>
<span><%#Eval("username")%>:</span><%#Eval("content").ToString()))%></p>
<p>
<em>发表时间:
<%#Eval("addtime")%>
</em>
</p>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
<p>
总记录:<asp:LiteralID="ltlCount"runat="server"></asp:Literal></p>
<p>
<webdiyer:AspNetPagerID="AspNetPager1"runat="server"AlwaysShow="true"PageIndexBoxType="DropDownList">
</webdiyer:AspNetPager>
</p>
</div>
</ContentTemplate>
</asp:UpdatePanel>
3、AspNetPager分页控件
可以看到以上的代码有个分页控件,我相信这个分页控件大家都不陌生了,我就不多介绍。必须有AspNetPager.dll,然后在项目中引用,在头部引入这一段代码:
<%@RegisterAssembly="AspNetPager"Namespace="Wuqi.Webdiyer"TagPrefix="webdiyer"%>
这时候分页控件应该就可以使用了。最后在后台绑定一下数据,同时也要绑定AspNetPager控件,完整的后台代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Data;
usingWuqi.Webdiyer;
usingSystem.Data.SqlClient;
publicpartialclassAjaxPager:System.Web.UI.Page
{
intcurrentPageNumber;//当前页号
intpageSize=5;//每页显示记录条数
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
currentPageNumber=1;
ViewState["currentPageNumber"]=currentPageNumber;
BindData();
}
AspNetPager1.PageChanged+=newEventHandler(AspNetPager1_PageChanged);//定义控件分页事件
}
//获取记录总数
privateintGetCount()
{
stringsql="selectCOUNT(*)fromT_Test";
DataTabledt=GetTable(sql,CommandType.Text,values);
if(dt.Rows.Count>0)
{
returnConvert.ToInt32(dt.Rows[0][0]);
}
else
{
return0;
}
}
//绑定数据
privatevoidBindData()
{
ltlCount.Text=GetCount().ToString();
currentPageNumber=Convert.ToInt32(ViewState["currentPageNumber"]);
SqlParameter[]values={newSqlParameter("@PageNumber",currentPageNumber),newSqlParameter("@PageSize",pageSize)};
DataTabledt=GetTable("P_Pager",CommandType.StoredProcedure,values);//调用存储过程
if(dt.Rows.Count>0)
{
AspNetPager1.PageSize=pageSize;
AspNetPager1.RecordCount=GetCount();
AspNetPager1.CurrentPageIndex=currentPageNumber;
this.Repeater1.DataSource=dt.DefaultView;
this.Repeater1.DataBind();
}
}
//分页事件
voidAspNetPager1_PageChanged(objectsender,EventArgse)
{
currentPageNumber=AspNetPager1.CurrentPageIndex;
ViewState["currentPageNumber"]=currentPageNumber;
BindData();
}
//读取存储过程返回table
privateDataTableGetTable(stringsql,CommandTypet,paramsSqlParameter[]values)
{
using(SqlConnectionconn=newSqlConnection("DataSource=127.0.0.1;InitialCatalog=testDB;PersistSecurityInfo=True;UserID=sa;Password=123456"))
{
SqlCommandcomm=newSqlCommand(sql,conn);
comm.CommandType=t;
if(values!=null&&values.Length>0)
comm.Parameters.AddRange(values);
SqlDataAdapterda=newSqlDataAdapter(comm);
DataSetds=newDataSet();
try
{
conn.Open();
da.Fill(ds);
returnds.Tables[0];
}
catch(Exception)
{
returnnull;
}
finally
{
conn.Close();
conn.Dispose();
}
}
}
}
至此,基本大功告成,虽然比较简单,但是涉及到存储过程,Ajax,分页控件等知识点,还是蛮值得收藏和学习的,希望我的这篇文章是抛砖引玉,让大家提供更好的方法,才是我学习的动力。