asp.net Repeater分页实例(PageDataSource的使用) |
Asp.net提供了三个功能强大的列表控件:DataGrid、DataList和Repeater控件,但其中只有DataGrid控件提供分页功能 。相对DataGrid,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据 。 实现DataList或Repeater控件的分页显示有几种方法: 1、写一个方法或存储过程,根据传入的页数返回需要显示的数据表(DataTable) 2、使用PagedDataSource类(位于System.Web.UI.WebControls命名空间里) 本篇文章主要说怎么使用PagedDataSource类实现DataList和Repeater控件的分页显示 。DataGrid控件内部也使用了PagedDataSource类,PagedDataSource 类封装 DataGrid 控件的属性,这些属性使 DataGrid 可以执行分页 。 PagedDataSource 类的部分公共属性: AllowCustomPaging 获取或设置指示是否启用自定义分页的值 。 AllowPaging 获取或设置指示是否启用分页的值 。 Count 获取要从数据源使用的项数 。 CurrentPageIndex 获取或设置当前页的索引 。 DataSource 获取或设置数据源 。 DataSourceCount 获取数据源中的项数 。 FirstIndexInPage 获取页中的第一个索引 。 IsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页 。 IsFirstPage 获取一个值,该值指示当前页是否是首页 。 IsLastPage 获取一个值,该值指示当前页是否是最后一页 。 IsPagingEnabled 获取一个值,该值指示是否启用分页 。 IsReadOnly 获取一个值,该值指示数据源是否是只读的 。 IsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全) 。 PageCount 获取显示数据源中的所有项所需要的总页数 。 PageSize 获取或设置要在单页上显示的项数 。 VirtualCount 获取或设置在使用自定义分页时数据源中的实际项数 。 这些属性是否和DataGrid的属性很相似?没错,DataGrid控件就是使用PagedDataSource类来实现数据分页显示的 。 下面举个使用PagedDataSource类实现DataList和Repeater控件的分页显示的例子: 复制代码 代码如下: public void Page_Load(Object src,EventArgs e) { OleDbConnection objConn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.mdb"); OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Users",objConn); DataSet ds=new DataSet(); objCommand.Fill(ds); //对PagedDataSource 对象的相关属性赋值 PagedDataSource objPds = new PagedDataSource(); objPds.DataSource = ds.Tables[0].DefaultView; objPds.AllowPaging = true; objPds.PageSize = 5; int CurPage; //当前页面从Page查询参数获取 if (Request.QueryString["Page"] != null) CurPage=Convert.ToInt32(Request.QueryString["Page"]); else CurPage=1; objPds.CurrentPageIndex = CurPage-1; lblCurrentPage.Text = "Page: " + CurPage.ToString(); if (!objPds.IsFirstPage) lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath+"?Page="+ onvert.ToString(CurPage-1); if (!objPds.IsLastPage) lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+"?Page="+Convert.ToString(CurPage+1); //把PagedDataSource 对象赋给Repeater控件 Repeater1.DataSource=objPds; Repeater1.DataBind(); } 这样可以简单实现Repeater分页功能,但有个缺点就是每次把所有的数据查询出来,如果数据量大的话,这样效率就会比较低 。此时用存储过程实现较好! |