Repeater和DataList控件提供了一个快速、灵活的表现数据的方式,但是,它们没有内建的分页功能;DataGrid控件提供了内建的分页功能,但它的结构比较复杂。下面就用PagedDataSource类实现Repeater和DataList的分页。 PagedDataSource封装了DataGrid的分页属性,我们可以象DataGrid那样进行分页。代码如下:
<%
...
@ Page Language="C#"
%>
<% ... @ import namespace="System.Data" %>
<% ... @ import namespace="System.Data.OleDb" %>
< script language ="C#" runat ="server" > ...
public void Page_Load(Object src,EventArgs e) ...{
OleDbConnection objConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
Server.MapPath("../aspxWeb.mdb"));
OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Document",objConn);
DataSet ds=new DataSet();
objCommand.Fill(ds);
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = ds.Tables[0].DefaultView;
objPds.AllowPaging = true;
objPds.PageSize = 5;
int CurPage;
if (Request.QueryString["Page"] != null)
CurPage=Convert.ToInt32(Request.QueryString["Page"]);
else
CurPage=1;
objPds.CurrentPageIndex = CurPage-1;
lblCurrentPage.Text = "当前页:" + CurPage.ToString();
if (!objPds.IsFirstPage)
lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);
if (!objPds.IsLastPage)
lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1);
Repeater1.DataSource=objPds;
Repeater1.DataBind();
}
</ script >
< html >
< head >
< title > Repeater控件分页的例子 </ title >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" >
< style > ...
P,TD,DIV,SPAN {...}{font-size:9pt}
</ style >
</ head >
< body >
< form name ="form1" method ="POST" runat ="server" >
< div style ="padding:5px;background-color:#dedede" >
< asp:label ID ="lblCurrentPage" runat ="server" ></ asp:label ></ td >
< td > < asp:HyperLink id ="lnkPrev" runat ="server" > 上一页 </ asp:HyperLink >
< asp:HyperLink id ="lnkNext" runat ="server" > 下一页 </ asp:HyperLink >
</ div >
< hr size ="1" color ="#000099" />
< asp:Repeater ID ="Repeater1" runat ="server" >
< Itemtemplate >
< div style ="padding:5px;background-color:#dedede" >
<% ... # DataBinder.Eval(Container.DataItem, "Title") %>
</ div >
</ Itemtemplate >
</ asp:Repeater >
</ form >
</ body >
</ html >
<% ... @ import namespace="System.Data" %>
<% ... @ import namespace="System.Data.OleDb" %>
< script language ="C#" runat ="server" > ...
public void Page_Load(Object src,EventArgs e) ...{
OleDbConnection objConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
Server.MapPath("../aspxWeb.mdb"));
OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Document",objConn);
DataSet ds=new DataSet();
objCommand.Fill(ds);
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = ds.Tables[0].DefaultView;
objPds.AllowPaging = true;
objPds.PageSize = 5;
int CurPage;
if (Request.QueryString["Page"] != null)
CurPage=Convert.ToInt32(Request.QueryString["Page"]);
else
CurPage=1;
objPds.CurrentPageIndex = CurPage-1;
lblCurrentPage.Text = "当前页:" + CurPage.ToString();
if (!objPds.IsFirstPage)
lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);
if (!objPds.IsLastPage)
lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1);
Repeater1.DataSource=objPds;
Repeater1.DataBind();
}
</ script >
< html >
< head >
< title > Repeater控件分页的例子 </ title >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" >
< style > ...
P,TD,DIV,SPAN {...}{font-size:9pt}
</ style >
</ head >
< body >
< form name ="form1" method ="POST" runat ="server" >
< div style ="padding:5px;background-color:#dedede" >
< asp:label ID ="lblCurrentPage" runat ="server" ></ asp:label ></ td >
< td > < asp:HyperLink id ="lnkPrev" runat ="server" > 上一页 </ asp:HyperLink >
< asp:HyperLink id ="lnkNext" runat ="server" > 下一页 </ asp:HyperLink >
</ div >
< hr size ="1" color ="#000099" />
< asp:Repeater ID ="Repeater1" runat ="server" >
< Itemtemplate >
< div style ="padding:5px;background-color:#dedede" >
<% ... # DataBinder.Eval(Container.DataItem, "Title") %>
</ div >
</ Itemtemplate >
</ asp:Repeater >
</ form >
</ body >
</ html >