前段時間做個留言板的功能
業務要求需要對留言列表的查看翻頁無刷新
所以做了以下的無刷新分頁功能
雖然比較簡單
但是涉及到的知識面蠻多的
我記錄一下制作的步驟與心得
僅供參考
如有哪裡不足
希望大家指出
有更好的方法
也可以提出來
大家一起學習
新建一個分頁存儲過程
CREATE procedure [dbo][P_Pager]
(@PageNumber int
@PageSize int)
as
declare @sql nvarchar()
set @sql = select top + Convert(varchar @PageSize) + * from T_Test where [type]= and id not in (select top + Convert(varchar (@PageNumber ) * @PageSize) + id from T_Test order by id desc) order by id desc
exec sp_executesql @sql
GO
設置Ajax控件
想要實現無刷新肯定會用到Ajax首先是要放入必不可少的
<asp:ScriptManager ID=ScriptManager runat=server>
</asp:ScriptManager>
接著把Repeater控件嵌入到UpdatePanel裡面去
<asp:UpdatePanel ID=UpdatePanel runat=server>
<ContentTemplate>
<ul>
<asp:Repeater ID=Repeater 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:Literal ID=ltlCount runat=server></asp:Literal></p>
<p>
<webdiyer:AspNetPager ID=AspNetPager runat=server AlwaysShow=true PageIndexBoxType=DropDownList >
</webdiyer:AspNetPager>
</p>
</div>
</ContentTemplate>
</asp:UpdatePanel>
AspNetPager分頁控件
可以看到以上的代碼有個分頁控件我相信這個分頁控件大家都不陌生了我就不多介紹必須有AspNetPagerdll然後在項目中引用在頭部引入這一段代碼
<%@ Register Assembly=AspNetPager Namespace=WuqiWebdiyer TagPrefix=webdiyer %>
這時候分頁控件應該就可以使用了最後在後台綁定一下數據同時也要綁定AspNetPager控件完整的後台代碼如下
using System;
using SystemCollectionsGeneric;
using SystemWeb;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemData;
using WuqiWebdiyer;
using SystemDataSqlClient;
public partial class AjaxPager : SystemWebUIPage
{
int currentPageNumber;//當前頁號
int pageSize = ;//每頁顯示記錄條數
protected void Page_Load(object sender EventArgs e)
{
if (!IsPostBack)
{
currentPageNumber = ;
ViewState[currentPageNumber] = currentPageNumber;
BindData();
}
AspNetPagerPageChanged += new EventHandler(AspNetPager_PageChanged); //定義控件分頁事件
}
//獲取記錄總數
private int GetCount()
{
string sql = select COUNT(*) from T_Test;
DataTable dt = GetTable(sql CommandTypeText values);
if (dtRowsCount > )
{
return ConvertToInt(dtRows[][]);
}
else
{
return ;
}
}
//綁定數據
private void BindData()
{
ltlCountText = GetCount()ToString();
currentPageNumber = ConvertToInt(ViewState[currentPageNumber]);
SqlParameter[] values = { new SqlParameter(@PageNumber currentPageNumber) new SqlParameter(@PageSize pageSize) };
DataTable dt = GetTable(P_Pager CommandTypeStoredProcedure values); //調用存儲過程
if (dtRowsCount > )
{
AspNetPagerPageSize = pageSize;
AspNetPagerRecordCount = GetCount();
AspNetPagerCurrentPageIndex = currentPageNumber;
thisRepeaterDataSource = dtDefaultView;
thisRepeaterDataBind();
}
}
//分頁事件
void AspNetPager_PageChanged(object sender EventArgs e)
{
currentPageNumber = AspNetPagerCurrentPageIndex;
ViewState[currentPageNumber] = currentPageNumber;
BindData();
}
// 讀取存儲過程返回table
private DataTable GetTable(string sql CommandType t params SqlParameter[] values)
{
using (SqlConnection conn = new SqlConnection(Data Source=;Initial Catalog=testDB;Persist Security Info=True;User ID=sa;Password=))
{
SqlCommand comm = new SqlCommand(sql conn);
commCommandType = t;
if (values != null && valuesLength > )
commParametersAddRange(values);
SqlDataAdapter da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
try
{
connOpen();
daFill(ds);
return dsTables[];
}
catch (Exception)
{
return null;
}
finally
{
connClose();
connDispose();
}
}
}
}
至此基本大功告成雖然比較簡單但是涉及到存儲過程Ajax分頁控件等知識點還是蠻值得收藏和學習的希望我的這篇文章是拋磚引玉讓大家提供更好的方法才是我學習的動力求知若饑虛心若愚
From:http://tw.wingwit.com/Article/program/net/201311/12335.html