asp.NetRepeaterページングインスタンス(PageDataSourceの使用)

3042 ワード

Asp.Netでは、DataGrid、DataList、Repeaterの3つの強力なリストコントロールが用意されていますが、DataGridコントロールだけがページング機能を提供しています.DataGridに対して、DataListおよびRepeaterコントロールはスタイルのカスタマイズ性が高いため、DataListまたはRepeaterコントロールを使用してデータを表示するのが好きな場合が多い.
DataListまたはRepeaterコントロールのページング表示を実現するには、いくつかの方法があります.
1.入力されたページ数に応じて表示するデータテーブル(DataTable)を返す方法または記憶プロセスを書く
2、PagedDataSourceクラス(System.Web.UI.WebControlネーミングスペースにある)を使用する
この記事では、PagedDataSourceクラスを使用して、DataListとRepeaterコントロールのページング表示を実現する方法について説明します.DataGridコントロールの内部にはPagedDataSourceクラスも使用され、PagedDataSourceクラスはDataGridコントロールの属性をカプセル化し、これらの属性によりDataGridはページングを実行することができる.
PagedDataSourceクラスの共通属性の一部:
AllowCustomPagingは、カスタムページングが有効かどうかを示す値を取得または設定します.
AllowPagingは、ページングが有効かどうかを示す値を取得または設定します.
Countは、データ・ソースから使用するアイテムの数を取得します.
CurrentPageIndexは、現在のページのインデックスを取得または設定します.
データソースを取得または設定します.
DataSourceCountは、データ・ソースのアイテム数を取得します.
FirstIndexInPageページの最初のインデックスを取得します.
IsCustomPagingEnabledは、カスタムページングが有効かどうかを示す値を取得します.
IsFirstPageは、現在のページがトップページであるかどうかを示す値を取得します.
IsLastPageは、現在のページが最後のページであるかどうかを示す値を取得します.
IsPagingEnabledは、ページングが有効かどうかを示す値を取得します.
IsReadOnlyは、データ・ソースが読み取り専用であるかどうかを示す値を取得します.
IsSynchronizedは、データ・ソースへのアクセスを同期するかどうかを示す値を取得します(スレッド・セキュリティ).
PageCountは、データ・ソースのすべてのアイテムを表示するために必要な合計ページ数を取得します.
PageSizeは、1ページに表示するアイテムの数を取得または設定します.
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ページング機能を簡単に実現できるが,すべてのデータをクエリーするたびにデータ量が大きいと効率が低下するという欠点がある.この場合、ストレージ・プロシージャを使用して実装するとよいでしょう.