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,分页控件等知识点,还是蛮值得收藏和学习的,希望我的这篇文章是抛砖引玉,让大家提供更好的方法,才是我学习的动力。