Asp.net 提供了三个功能强大的列表控件:DataGrid、DataList 和 Repeater 控件,相对 DataGrid,DataList 和 Repeater 控件具有更高的样式自定义性,很多时候我们喜欢使用 DataList 或 Repeater 控件来显示数据,但是 Repeater 和 DataList 没有分页功能,有时很不方便。
PagedDataSource 类封装了 DataGrid 控件的属性,从而使 DataGrid 控件可以执行分页,它就是一个数据的容器,我们先把数据从数据库中读取出来放在这个容器中,然后设置容器的属性取出当前要显示的页上的部分数据,然后将此部分数据再绑定到页面上的显示控件上。
下面实例是 Repeater 控件和 HyperLink 控件结合 PagedDataSource 类实现的数据分页列表
数据功能实现源代码:
//对用于分页的类的引用
PagedDataSource pds=new PagedDataSource();
pds.DataSource=dt.DefaultView;//设置数据源(DataTable类型)
pds.AllowPaging=true;
//第页显示的行数
pds.PageSize=18;
//设置当前页
if(Pageindex<1) Pageindex=1;
pds.CurrentPageIndex=Pageindex-1;
rpt_NewsList.DataSource=pds;
rpt_NewsList.DataBind();
//显示页码
ltl_RecordCount.Text = pds.DataSourceCount.ToString();
ltl_PageCount.Text = pds.PageCount.ToString();
ltl_Pageindex.Text = Pageindex.ToString();
ltl_Jump.Text = Jump_List (pds.PageCount , Pageindex , L_Manage);
//显示上下翻页(URL 后面跟的参数自已跟据需要定义)
lbn_First.ToolTip = "跳转到首页";
lbn_First.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page=1";
lbn_Prev.ToolTip = "跳转到上一页";
lbn_Prev.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page="+(Pageindex-1);
lbn_Next.ToolTip = "跳转到下一页";
lbn_Next.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page="+(Pageindex+1);
lbn_Last.ToolTip = "跳转到最后一页";
lbn_Last.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page="+pds.PageCount.ToString();
//确定链接的显示方式
if(Pageindex<=1 && pds.PageCount<=1)
{
lbn_First.NavigateUrl = "";
lbn_Prev.NavigateUrl = "";
lbn_Next.NavigateUrl = "";
lbn_Last.NavigateUrl = "";
}
if(Pageindex<=1 && pds.PageCount>1)
{
lbn_First.NavigateUrl = "";
lbn_Prev.NavigateUrl = "";
}
if(Pageindex >= pds.PageCount)
{
lbn_Next.NavigateUrl = "";
lbn_Last.NavigateUrl = "";
}
/// <summary>
/// 计算分页跳转
/// </summary>
/// <param name="Pagecount">页面数</param>
/// <returns>string</returns>
private string Jump_List(int Pagecount , int Pageindex , long L_Manage)
{
StringBuilder sb = new StringBuilder ();
sb.Append ("<select id=\"Page_Jump\" name=\"Page_Jump\" onchange=\"window.location='"+ Request.CurrentExecutionFilePath +"?page='+ this.options[this.selectedIndex].value + '&Org_ID="+ L_Manage +"';\">");
for(int i = 1 ; i <= Pagecount ; i++)
{
if(Pageindex == i)
sb.Append ("<option value='"+ i +"' selected>"+ i +"</option>");
else
sb.Append ("<option value='"+ i +"'>"+ i +"</option>");
}
sb.Append ("</select>");
return sb.ToString ();
}
动行显示效果如图: