posts - 495,comments - 227,trackbacks - 0
          Asp.net提供了三個功能強大的列表控件:DataGrid、DataList和Repeater控件,但其中只有DataGrid控件提供分頁功能。相對DataGrid,DataList和Repeater控件具有更高的樣式自定義性,所以很多時候我們喜歡使用DataList或Repeater控件來顯示數據。


          ?實現DataList或Repeater控件的分頁顯示有幾種方法:
          ?1、寫一個方法或存儲過程,根據傳入的頁數返回需要顯示的數據表(DataTable)
          ?2、使用PagedDataSource類

          ?????本篇文章主要說怎么使用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="?+?Convert.ToString(CurPage-1);

          if?(!objPds.IsLastPage)
          ??lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+?"?Page="?+?Convert.ToString(CurPage+1);

          //把PagedDataSource?對象賦給Repeater控件
          Repeater1.DataSource=objPds;
          Repeater1.DataBind();
          }

          這樣就可以很簡單的實現DataList和Repeater控件的分頁顯示。但這樣做有個缺點,就是每次都要把所有頁的數據Select出來,DataGrid也是這樣,這樣會降低一點效率(大多時候體會不出來差別);如果使用第一種方法就可以只Select出當前頁的數據(實現方法請查看有關文章)
          posted on 2007-01-25 13:10 SIMONE 閱讀(1235) 評論(0)  編輯  收藏 所屬分類: .NET
          主站蜘蛛池模板: 马边| 翁牛特旗| 普洱| 兴山县| 荆州市| 余干县| 汉沽区| 天门市| 南开区| 宜宾市| 鹿泉市| 芜湖市| 四会市| 富源县| 牙克石市| 东平县| 大荔县| 仲巴县| 孟连| 社会| 阿拉善盟| 稷山县| 鹿泉市| 萨嘎县| 鸡西市| 平谷区| 临潭县| 仁怀市| 东宁县| 博野县| 上犹县| 兴海县| 五河县| 博罗县| 板桥市| 安图县| 岳阳县| 威信县| 白玉县| 新闻| 湾仔区|