前段时间做个留言板的功能业务要求需要对留言列表的查看翻页无刷新所以做了以下的无刷新分页功能虽然比较简单但是涉及到的知识面蛮多的我记录一下制作的步骤与心得仅供参考如有哪里不足希望大家指出有更好的方法也可以提出来大家一起学习
新建一个分页存储过程
CREATEprocedure[dbo][P_Pager]
(@PageNumberint
@PageSizeint)
as
declare@sqlnvarchar()
set@sql=selecttop+Convert(varchar@PageSize)+*fromT_Testwhere[type]=andidnotin(selecttop+Convert(varchar(@PageNumber)*@PageSize)+idfromT_Testorderbyiddesc)orderbyiddesc
execsp_executesql@sql
GO
设置Ajax控件
想要实现无刷新肯定会用到Ajax首先是要放入必不可少的
<asp:ScriptManagerID=ScriptManagerrunat=server>
</asp:ScriptManager>
接着把Repeater控件嵌入到UpdatePanel里面去
<asp:UpdatePanelID=UpdatePanelrunat=server>
<ContentTemplate>
<ul>
<asp:RepeaterID=Repeaterrunat=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=ltlCountrunat=server></asp:Literal></p>
<p>
<webdiyer:AspNetPagerID=AspNetPagerrunat=serverAlwaysShow=truePageIndexBoxType=DropDownList>
</webdiyer:AspNetPager>
</p>
</div>
</ContentTemplate>
</asp:UpdatePanel>
AspNetPager分页控件
可以看到以上的代码有个分页控件我相信这个分页控件大家都不陌生了我就不多介绍必须有AspNetPagerdll然后在项目中引用在头部引入这一段代码
<%@RegisterAssembly=AspNetPagerNamespace=WuqiWebdiyerTagPrefix=webdiyer%>
这时候分页控件应该就可以使用了最后在后台绑定一下数据同时也要绑定AspNetPager控件完整的后台代码如下
usingSystem;
usingSystemCollectionsGeneric;
usingSystemWeb;
usingSystemWebUI;
usingSystemWebUIWebControls;
usingSystemData;
usingWuqiWebdiyer;
usingSystemDataSqlClient;
publicpartialclassAjaxPager:SystemWebUIPage
{
intcurrentPageNumber;//当前页号
intpageSize=;//每页显示记录条数
protectedvoidPage_Load(objectsenderEventArgse)
{
if(!IsPostBack)
{
currentPageNumber=;
ViewState[currentPageNumber]=currentPageNumber;
BindData();
}
AspNetPagerPageChanged+=newEventHandler(AspNetPager_PageChanged);//定义控件分页事件
}
//获取记录总数
privateintGetCount()
{
stringsql=selectCOUNT(*)fromT_Test;
DataTabledt=GetTable(sqlCommandTypeTextvalues);
if(dtRowsCount>)
{
returnConvertToInt(dtRows[][]);
}
else
{
return;
}
}
//绑定数据
privatevoidBindData()
{
ltlCountText=GetCount()ToString();
currentPageNumber=ConvertToInt(ViewState[currentPageNumber]);
SqlParameter[]values={newSqlParameter(@PageNumbercurrentPageNumber)newSqlParameter(@PageSizepageSize)};
DataTabledt=GetTable(P_PagerCommandTypeStoredProcedurevalues);//调用存储过程
if(dtRowsCount>)
{
AspNetPagerPageSize=pageSize;
AspNetPagerRecordCount=GetCount();
AspNetPagerCurrentPageIndex=currentPageNumber;
thisRepeaterDataSource=dtDefaultView;
thisRepeaterDataBind();
}
}
//分页事件
voidAspNetPager_PageChanged(objectsenderEventArgse)
{
currentPageNumber=AspNetPagerCurrentPageIndex;
ViewState[currentPageNumber]=currentPageNumber;
BindData();
}
//读取存储过程返回table
privateDataTableGetTable(stringsqlCommandTypetparamsSqlParameter[]values)
{
using(SqlConnectionconn=newSqlConnection(DataSource=;InitialCatalog=testDB;PersistSecurityInfo=True;UserID=sa;Password=))
{
SqlCommandcomm=newSqlCommand(sqlconn);
commCommandType=t;
if(values!=null&&valuesLength>)
commParametersAddRange(values);
SqlDataAdapterda=newSqlDataAdapter(comm);
DataSetds=newDataSet();
try
{
connOpen();
daFill(ds);
returndsTables[];
}
catch(Exception)
{
returnnull;
}
finally
{
connClose();
connDispose();
}
}
}
}
至此基本大功告成虽然比较简单但是涉及到存储过程Ajax分页控件等知识点还是蛮值得收藏和学习的希望我的这篇文章是抛砖引玉让大家提供更好的方法才是我学习的动力求知若饑虚心若愚