在上一篇中,我向大家介绍了repeater控件实现排序的方法,今天我再向大家介绍repeater控件如何实现分页的效果。
分页分为真分页和假分页。
真分页:控件上一页需要显示多少数据,就从数据库取出并绑定多少数据,每次换页时都需要访问数据库。
假分页:从数据库一次性取出所有数据绑定到控件上,再将所有数据根据一页显示多少条而分页。
从以上二者的概念上我们可以看出,区别在于分页时从数据库读取信息的方式,真分页的效率无疑是最高的。假分页在首次页面加载的时候会比较慢(如果数据量较多)。
二者其实各有各的优缺点,可根据需要来自行选择(比如数据量较多时,先用真分页;想减少与后台的交互,可以使用假分页)。
下面我就介绍repeater控件基于以上两种方法的分页:
无论真分页还是假分页,前台分页按钮代码都可以类似以下的方式:
<span style="font-size:18px;"><table>
<tr>
<tdalign="center">
<asp:LinkButtonID="lbtnFirstPage" runat="server"OnClick="lbtnFirstPage_Click">页首</asp:LinkButton>
<asp:LinkButton ID="lbtnpritPage" runat="server"OnClick="lbtnpritPage_Click">上一页</asp:LinkButton>
<asp:LinkButtonID="lbtnNextPage" runat="server"OnClick="lbtnNextPage_Click">下一页</asp:LinkButton>
<asp:LinkButton ID="lbtnDownPage" runat="server"OnClick="lbtnDownPage_Click">页尾</asp:LinkButton><br/>
第<asp:LabelID="labPage" runat="server"Text="Label"></asp:Label>页/共<asp:LabelID="LabCountPage" runat="server"Text="Label"></asp:Label>页
</td>
</tr>
</table></span>
1. 假分页
<span style="font-size:18px;">protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
this.labPage.Text = "1";
this.contrlRepeater();
}
}
//获取指字符个数的字符
public string cuts(string aa,intbb)
{
if(aa.Length <= bb)
{
return aa;
}
else
{
returnaa.Substring(0, bb);
}
}
//Repeater分页控制显示方法
public void contrlRepeater()
{
DataTabledt = '连接数据库并查询'
PagedDataSource pds = newPagedDataSource();
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 = true;
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 voidlbtnpritPage_Click(object sender, EventArgs e)
{
this.labPage.Text = Convert.ToString(Convert.ToInt32(labPage.Text)- 1);
this.contrlRepeater();
}
protected voidlbtnFirstPage_Click(object sender, EventArgs e)
{
this.labPage.Text = "1";
this.contrlRepeater();
}
protected voidlbtnDownPage_Click(object sender, EventArgs e)
{
this.labPage.Text =this.LabCountPage.Text;
this.contrlRepeater();
}
protected voidlbtnNextPage_Click(object sender, EventArgs e)
{
this.labPage.Text = Convert.ToString(Convert.ToInt32(labPage.Text)+ 1);
this.contrlRepeater();
}</span>
2. 真分页
真分页主要实现在于sql语句上:
select
再查询出总记录数来计算总页数pageCount
int pageCount =(int)Math.Ceiling((double)查询出的总记录数个数/ (double)每页显示的记录数)
之后将返回的数据表直接绑定到repeater控件上,再将当前页数、总页数利用以上我给出的假分页套上就行了。
有了思路和主要代码,相信大家自己应该能套上,我就不再重复写代码了。