首先,先来看一个类: PagedDataSource 其成员如下:
名称 | 说明 | |
---|---|---|
![]() | AllowCustomPaging | 获取或设置一个值,指示是否在数据绑定控件中启用自定义分页。 |
![]() | AllowPaging | 获取或设置一个值,指示是否在数据绑定控件中启用分页。 |
![]() | AllowServerPaging | 获取或设置一个值,指示是否启用服务器端分页。 |
![]() | Count | 获取要从数据源使用的项数。 |
![]() | CurrentPageIndex | 获取或设置当前页的索引。 |
![]() | DataSource | 获取或设置数据源。 |
![]() | DataSourceCount | 获取数据源中的项数。 |
![]() | FirstIndexInPage | 获取页面中显示的首条记录的索引。 |
![]() | IsCustomPagingEnabled | 获取一个值,该值指示是否启用自定义分页。 |
![]() | IsFirstPage | 获取一个值,该值指示当前页是否是首页。 |
![]() | IsLastPage | 获取一个值,该值指示当前页是否是最后一页。 |
![]() | IsPagingEnabled | 获取一个值,该值指示是否启用分页。 |
![]() | IsReadOnly | 获取一个值,该值指示数据源是否是只读的。 |
![]() | IsServerPagingEnabled | 获取一个值,指示是否启用服务器端分页支持。 |
![]() | IsSynchronized | 获取一个值,该值指示是否同步对数据源的访问(线程安全)。 |
![]() | PageCount | 获取显示数据源中的所有项所需要的总页数。 |
![]() | PageSize | 获取或设置要在单页上显示的项数。 |
![]() | SyncRoot | 获取可用于同步集合访问的对象。 |
![]() | VirtualCount | 获取或设置在使用自定义分页时数据源中的实际项数。 |
前台Html代码:
共:
<
asp:Label id
=
"
lblPageTotal
"
runat
=
"
server
"
></
asp:Label
>
页
< asp:LinkButton id = " lbFirst " onclick = " PagerButton_Click " runat = " server " CommandArgument = " first " > 首 页 </ asp:LinkButton >
< asp:LinkButton id = " lbPrev " onclick = " PagerButton_Click " runat = " server " CommandArgument = " prev " > 上一页 </ asp:LinkButton >
< asp:LinkButton id = " lbNext " onclick = " PagerButton_Click " runat = " server " CommandArgument = " next " > 下一页 </ asp:LinkButton >
< asp:LinkButton id = " lbLast " onclick = " PagerButton_Click " runat = " server " CommandArgument = " last " > 尾 页 </ asp:LinkButton >
当前:第 < asp:Label id = " lblCurrentPage " runat = " server " ></ asp:Label > 页
跳转至:第 < asp:DropDownList ID = " ddlPage " runat = " server " AutoPostBack = " true " OnSelectedIndexChanged = " ddlPage_SelectedIndexChanged " ></ asp:DropDownList > 页
后台.cs代码:
< asp:LinkButton id = " lbFirst " onclick = " PagerButton_Click " runat = " server " CommandArgument = " first " > 首 页 </ asp:LinkButton >
< asp:LinkButton id = " lbPrev " onclick = " PagerButton_Click " runat = " server " CommandArgument = " prev " > 上一页 </ asp:LinkButton >
< asp:LinkButton id = " lbNext " onclick = " PagerButton_Click " runat = " server " CommandArgument = " next " > 下一页 </ asp:LinkButton >
< asp:LinkButton id = " lbLast " onclick = " PagerButton_Click " runat = " server " CommandArgument = " last " > 尾 页 </ asp:LinkButton >
当前:第 < asp:Label id = " lblCurrentPage " runat = " server " ></ asp:Label > 页
跳转至:第 < asp:DropDownList ID = " ddlPage " runat = " server " AutoPostBack = " true " OnSelectedIndexChanged = " ddlPage_SelectedIndexChanged " ></ asp:DropDownList > 页
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["PageIndex"] = "0"; //第一次生成,页码索引置0
this.BindGrid();
ddlPage.Items.Clear();
for (int i = 0; i < Int32.Parse(lblPageTotal.Text); i++)
{
string itemText = (i + 1).ToString();
ddlPage.Items.Add(new ListItem(itemText, itemText));
}
}
}
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
private void BindGrid()
{
DataTable table = this.CreateTable(); //CreateTable这个方法就是获取数据源的了,这里不贴了
if (table.Rows.Count > 0)
{
//对PagedDataSource 对象的相关属性赋值
objPDS = new PagedDataSource();
objPDS.DataSource = table.DefaultView;
objPDS.AllowPaging = true;
objPDS.PageSize = this.ListSize; //ListSize属性用于设置每页显示多少条,可以直接指定
objPDS.CurrentPageIndex = int.Parse(ViewState["PageIndex"].ToString());
lbFirst.Enabled = true;
lbPrev.Enabled = true;
lbNext.Enabled = true;
lbLast.Enabled = true;
//判断当前页是否首页
if (objPDS.IsFirstPage)
{
lbFirst.Enabled = false;
lbPrev.Enabled = false;
}
//判断当前页是否尾页
if (objPDS.IsLastPage)
{
lbNext.Enabled = false;
lbLast.Enabled = false;
}
this.dl_LinkList.DataSource = objPDS;
this.dl_LinkList.DataBind();
lblPageTotal.Text = objPDS.PageCount.ToString();
lblCurrentPage.Text = (objPDS.CurrentPageIndex + 1).ToString();
}
else
{
this.dl_LinkList.DataSource = table;
this.dl_LinkList.DataBind();
}
}
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
protected void PagerButton_Click(object sender, EventArgs e)
{
string arg = ((LinkButton)sender).CommandArgument.ToString().ToLower();
int pageIndex = int.Parse(ViewState["PageIndex"].ToString());
switch (arg)
{
case "first":
pageIndex = 0;
break;
case "last":
int itemCount = this.GetDataSource().Rows.Count;
int totalPage = itemCount % this.ListSize == 0 ? itemCount / ListSize : itemCount / (ListSize + 1);
pageIndex = totalPage - 1;
break;
case "prev":
pageIndex = pageIndex - 1;
break;
case "next":
pageIndex = pageIndex + 1;
break;
}
ViewState["PageIndex"] = pageIndex;
this.BindGrid();
ddlPage.SelectedIndex = pageIndex;
}
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
protected void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
{
ViewState["PageIndex"] = Int32.Parse(ddlPage.SelectedValue)-1;
this.BindGrid();
ddlPage.SelectedIndex = Int32.Parse(ViewState["PageIndex"].ToString());
}