repeater控件實現排序的方法,今天我再向大家介紹repeater控件如何實現分頁的效果。
分頁分為真分頁和假分頁。
真分頁:控件上一頁需要顯示多少數據,就從數據庫取出並綁定多少數據,每次換頁時都需要訪問數據庫。
假分頁:從數據庫一次性取出所有數據綁定到控件上,再將所有數據根據一頁顯示多少條而分頁。
從以上二者的概念上我們可以看出,區別在於分頁時從數據庫讀取信息的方式,真分頁的效率無疑是最高的。假分頁在首次頁面加載的時候會比較慢(如果數據量較多)。
二者其實各有各的優缺點,可根據需要來自行選擇(比如數據量較多時,先用真分頁;想減少與后台的交互,可以使用假分頁)。
下面我就介紹repeater控件基於以上兩種方法的分頁:
無論真分頁還是假分頁,前台分頁按鈕代碼都可以類似以下的方式:
<table>
<tr>
<td align="center">
<asp:LinkButton ID="lbtnFirstPage" runat="server" OnClick="lbtnFirstPage_Click">頁首</asp:LinkButton>
<asp:LinkButton ID="lbtnpritPage" runat="server" OnClick="lbtnpritPage_Click">上一頁</asp:LinkButton>
<asp:LinkButton ID="lbtnNextPage" runat="server" OnClick="lbtnNextPage_Click">下一頁</asp:LinkButton>
<asp:LinkButton ID="lbtnDownPage" runat="server" OnClick="lbtnDownPage_Click">頁尾</asp:LinkButton><br />
第<asp:Label ID="labPage" runat="server" Text="Label"></asp:Label>頁/共<asp:Label ID="LabCountPage" runat="server" Text="Label"></asp:Label>頁
</td>
</tr>
</table>
1. 假分頁
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.labPage.Text = "1";
this.contrlRepeater();
}
}
//獲取指字符個數的字符
public string cuts(string aa,int bb)
{
if (aa.Length <= bb)
{
return aa;
}
else
{
return aa.Substring(0, bb);
}
}
//Repeater分頁控制顯示方法
public void contrlRepeater()
{
DataTable dt = '連接數據庫並查詢'
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dt.DefaultView;
pds.AllowPaging = true;
pds.PageSize = 2;
pds.CurrentPageIndex = Convert.ToInt32(this.labPage.Text) - 1;
Repeater1.DataSource = pds;
LabCountPage.Text = pds.PageCount.ToString();
labPage.Text = (pds.CurrentPageIndex + 1).ToString();
this.lbtnpritPage.Enabled = true;
this.lbtnFirstPage.Enabled = t
this.lbtnNextPage.Enabled = true;
this.lbtnDownPage.Enabled = true;
if(pds.CurrentPageIndex<1)
{
this.lbtnpritPage.Enabled = false;
this.lbtnFirstPage.Enabled = false;
}
if (pds.CurrentPageIndex == pds.PageCount-1)
{
this.lbtnNextPage.Enabled = false;
this.lbtnDownPage.Enabled = false;
}
Repeater1.DataBind();
}
protected void lbtnpritPage_Click(object sender, EventArgs e)
{
this.labPage.Text = Convert.ToString(Convert.ToInt32(labPage.Text) - 1);
this.contrlRepeater();
}
protected void lbtnFirstPage_Click(object sender, EventArgs e)
{
this.labPage.Text = "1";
this.contrlRepeater();
}
protected void lbtnDownPage_Click(object sender, EventArgs e)
{
this.labPage.Text =this.LabCountPage.Text;
this.contrlRepeater();
}
protected void lbtnNextPage_Click(object sender, EventArgs e)
{
this.labPage.Text = Convert.ToString(Convert.ToInt32(labPage.Text) + 1);
this.contrlRepeater();
}
2. 真分頁
真分頁主要實現在於sql語句上:
select top 每頁顯示的記錄數 * from topic where id not in ( select top (當前的頁數-1)*每頁顯示的記錄數 id from topic order by id desc ) order by id desc
再查詢出總記錄數來計算總頁數pageCount
int pageCount = (int)Math.Ceiling((double)查詢出的總記錄數個數/ (double)每頁顯示的記錄數)
之后將返回的數據表直接綁定到repeater控件上,再將當前頁數、總頁數利用以上我給出的假分頁套上就行了。
有了思路和主要代碼, 相信大家自己應該能套上,我就不再重復寫代碼了。
轉:http://blog.csdn.net/dfdj1010/article/details/5783317