カスタムボタンにページ番号を追加する ~dg3.aspx

 

ページを移動しやすくするために、ページ移動ボタンの間にDropDownListを追加して特定のページに直接移動できるように改善します。DropDownListAutoPostBackプロパティに「True」を設定してページ番号を選択したときに、ページをポストバックさせます。TextBoxには、ページ総数を表示します。

 

 

6:ページ移動ボタンの間にDropDownList/Label/TextBoxを追加

 

 

DropDownListSelectedIndexChangedイベントハンドラーには、次のようなコードを追加します。DataGridCurrentPageIndexプロパティにDropDownListから選択した「ページ番号 – 1」を設定したら、BindDataGridメソッドを実行して選択したページを表示します。

 

Private Sub dropPages_SelectedIndexChanged(ByVal sender As Object, _

  ByVal e As System.EventArgs) Handles dropPages.SelectedIndexChanged

  DataGrid1.CurrentPageIndex = Int32.Parse(dropPages.SelectedValue) - 1

  BindDataGrid()

End Sub

 

BindDataGridメソッドには、次のようなコードを追加します。With…End Withでは、DropDownListDataSourceプロパティにページ番号が格納されているArrayListをバインドして、DataBindメソッドを実行します。DropDownListSelectedIndexプロパティにDataGridCurrentPageIndexプロパティを設定して、カレントページが選択された状態にします。TextBoxTextプロパティには、DataGridPageCountプロパティを設定して総ページ数を表示します。

 

Sub BindDataGrid()

  ・・・

  With dropPages

    .DataSource = CreatePageArray()

    .DataBind()

    .SelectedIndex = DataGrid1.CurrentPageIndex

  End With

  txtPages.Text = DataGrid1.PageCount.ToString()

  ・・・

End Sub

 

 

リスト5: 配列変数にページ番号を格納して返す

Function CreatePageArray() As ArrayList

  Dim arrPages As New ArrayList

  Dim intPage As Integer

 

  For intPage = 1 To DataGrid1.PageCount

    arrPages.Add(intPage)

  Next

  Return arrPages

End Function

 

 

7 DataGridにページ移動ボタンとページ番号を表示

 

 

Tip ページングを高速化する ~dg4.aspx

DataGridのページング処理を高速化するには、DataTableをキャッシングします。DataTableをキャッシングするには、BindDataGridメソッドに次のコードを追加します。キャッシュからDataTableのオブジェクトを取得したら、すでに解放されているか確認します。DataTableが解放されている(まだ作成されていない場合も含む)ときは、CreateDataTableメソッドを実行してDataTableを作成します。ここで作成したDataTableは、ポストバックされたときに再利用するために、キャッシングします。

 

Private mstrCacheKey As String = "CustomerDataTable"

Private mdtCustomers As DataTable

 

Sub BindDataGrid()

  ・・・

  mdtCustomers = Cache(mstrCacheKey)

  If mdtCustomers Is Nothing Then

    mdtCustomers = CreateDataTable(strSQL)

    Cache(mstrCacheKey) = mdtCustomers

  End If

 ・・・

End Sub