ASP.NET 徹底活用術のホームへ戻る

Repeater/DataListにページング機能を追加する ~rp1.aspx/dl1.aspx

 

Repeater/DataListにページング機能を追加するには、PagedDataSourceクラスを使用します。このクラスは、System.Web.UI.WebControlsの名前空間に含まれています。PagedDataSourceには、表2のようなプロパティがサポートされています。

 

PagedDataSourceAllowPagingプロパティに「True」、PageSizeプロパティに「行数」、CurrentPageIndexプロパティに「ページ番号」を設定したら、DataSourceプロパティにDataSet/DataTable/DataViewなどのオブジェクトを設定します。

 

Repeater/DataListDataSourceプロパティに、PagedDataSourceオブジェクトを設定して、DataBindバインドメソッドを実行します。Repeater/DataListには、PagedDataSourceCurrentPageIndexに設定したページが表示されます。ページを移動するときは、PagedDataSourceCurrentPageIndexを書き換えてからRepeater/DataListDataSourceに設定してDataBindメソッドを実行します。

 

表2 PagedDataSourceクラスでサポートしている主なプロパティ

プロパティ

説 明

AllowPaging

ページングを行うかどうかを「True/False」で設定します。

CurrentPageIndex

カレントのページ番号を参照/設定します。

DataSource

DataSet/DataTable/DataViewなどのオブジェクトを設定します。

IsFirstPage

カレントページが先頭ページのとき「True」が格納されています。

IsLastPage

カレントページが最終ページのとき「True」が格納されています。

PageCount

総ページ数が格納されています。

PageSize

ページサイズ(ページ当たりの行数)を参照/設定します。

 

Page_Loadイベントハンドラーでは、CreatePagedDataSourceメソッドを実行してPagedDataSourceオブジェクトを作成します。Webページが初期ロードのときは、BindRepeaterメソッドを実行します。BindRepeaterの引数には、表示するページ番号を指定します。

 

Private Sub Page_Load(・・・) Handles MyBase.Load

  Dim strSQL As String = "Select * From Customers"

  mpds = CreatePagedDataSource(strSQL, _

    Int32.Parse(dropPageSize.SelectedValue), _

    CurrentPageIndex)

  If Not IsPostBack Then

    BindRepeater(0)

  End If

End Sub

 

BindRepeaterメソッドは、PagedDataSourceオブジェクトのCurrentPageIndexプロパティにページ番号を設定します。Webページがポストバックされたとき、カレントのページを保持するためビューステートに、ページ番号を保存します。RepeaterDataSourceプロパティにPagedDataSourceを設定したら、DataBindメソッドを実行してバインドします。これで、RepeaterCurrentPageIndexに設定したページが表示されます。

 

リスト6: RepeaterPagedDataSourceをバインドする

Sub BindRepeater(ByVal intNewPageIndex As Integer)

  CurrentPageIndex = intNewPageIndex

  mpds.CurrentPageIndex = intNewPageIndex

  With Repeater1

    .DataSource = mpds

    .DataBind()

  End With

  SetButtons()

End Sub

 

CreatePagedDataSourceメソッドは、PagedDataSourceのインスタンスを生成して、DataSourceプロパティにDataViewオブジェクトを設定します。さらに、AllowPagingプロパティに「True」、PageSizeプロパティに「行数」、CurrentPageIndexプロパティに「ページ番号」を設定して戻り値として返します。

 

リスト7: PagedDataSourceを作成して戻り値として返す

Function CreatePagedDataSource(ByVal strSQL As String, _

  Optional ByVal intPageSize As Integer = 10, _

  Optional ByVal intPageIndex As Integer = 0) As PagedDataSource

  Dim pds As New PagedDataSource

  With pds

    .DataSource = CreateDataView(strSQL)

    .AllowPaging = True

    .PageSize = intPageSize

    .CurrentPageIndex = intPageIndex

  End With

  Return pds

End Function

 

 

リスト8: ページクラスにCurrentPageIndexプロパティを追加する

Public Property CurrentPageIndex() As Integer

  Get

    Dim obj As Object = ViewState("CurrentPageIndex")

    If obj Is Nothing Then

      Return 0

    End If

    Return CType(obj, Integer)

  End Get

  Set(ByVal Value As Integer)

    ViewState("CurrentPageIndex") = Value

  End Set

End Property

 

 

図8: Repeaterにページ移動ボタンを追加

 

 

Tip ページ派生クラスを使用する ~rp2.aspx/dl2.aspx

Repeater/DataListにページング機能を組み込むには、それぞれのページに「CurrentPageIndex」プロパティを追加したり、CreatePagedDateSourceCreateDataViewなどのメソッドを追加する必要があります。複数のページに同じコードを記述するのを回避するには、Pageクラスの派生クラス「MyBaseClass」を作成して「System.Web.UI.Page」の代わりに派生クラスを使用します。

 

Public Class rp2 

  Inherits System.Web.UI.Page

  ・・・

End Class

  ↓

Public Class rp2

  Inherits MyBaseClass

  ・・・

End Class

 

Pageクラスの派生クラスを作成するには、新規のクラスファイル「MyBaseClass.vb」を作成して、「Public Class MyBaseClass」に「Inherits System.Web.UI.Page」を追加します。

 

 

MyBaseClasss.vbファイル

Imports System.Data

Imports System.Data.OleDb

 

Public Class MyBaseClass

  Inherits System.Web.UI.Page

 

  Function CreatePagedDataSource(ByVal strSQL As String, _

  ・・・

  End Function

 

  Function CreateDataView(ByVal strSQL As String) As DataView

  ・・・

  End Function

 

  Public Property CurrentPageIndex() As Integer

  ・・・

  End Property

End Class

 

 

ASP.NET 徹底活用術のホームへ戻る