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

DataGridにカスタムボタンを追加する ~dg2.aspx

 

DataGridのプロパティビルダの「モード」から[次へ、戻るボタン]を選択したときは、「次のページ」と「前のページ」のボタンしか表示されませんので使い勝手がよくありません。ここでは、DataGridのページ移動ボタンの代わりに、独自のページ移動ボタンを使用します。新規Webページを作成したら、デザイナに「1x2」の表を作成します。表の1行目には、ページ移動ボタンを4個作成します。ボタンのプロパティを表1のように書き換えます。ページ移動ボタンには、OnCommandプロパティを追加してイベントプロシージャを共有します。コマンドを識別するために、CommandNameプロパティに「first」、「prev」、「next」、「last」を設定します。Font-Nameプロパティに「Webdings」を設定しますので、Textプロパティには「<<」、「<」、「>」、「>>」に対応する文字を設定します。表の2行目には、DataGridを作成してページング機能を追加にします。

 

1 ページ移動ボタンのプロパティを書き換える

コントロール

ID

CommandName

OnCommand

Font-Name

Text

ボタン1

btnFirst

first

Navigation_Command

Webdings

7

ボタン2

btnPrevious

prev

Navigation_Command

Webdings

3

ボタン3

btnNext

next

Navigation_Command

Webdings

4

ボタン4

btnLast

last

Navigation_Command

Webdings

8

 

 

図4:表の1行目にページ移動ボタンを4個配置する

 

 

 

コードウィンドウに切り替えたら、Page_Loadイベントハンドラーに、次のコードを追加してDataGridのページャを不可視にします。ここでは、DataGridのページ移動ボタンの代わりに、独自に用意したページ移動ボタン「<<, <, >, >>」を使用します。

 

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

  DataGrid1.PagerStyle.Visible = False

 ・・・

End Sub

 

BindDataGridメソッドに、SetButtonsメソッドを実行するコードを追加します。SetButtonsは、ButtonEnabledプロパティを「True」および「False」に書き換えて有効/無効に切り替えます。先頭ページが表示されているときは、「<<」と「<」ボタンを無効にします。最終ページが表示されているときは、「>」と「>>」ボタンを無効にします。

 

Sub BindDataGrid()

  ・・・

  SetButtons()

End Sub

 

ページ移動ボタンのNavigation_Commandイベントハンドラー(このイベントハンドラーは4個のボタンで共有する)に、MovePageメソッドを実行するコードを追加します。MovePageの引数には、CommandNameプロパティを指定します。CommandNameには、「first」、「prev」、「next」、「last」が格納されています。MovePageは、移動ボタンに対応させて「先頭ページ」、「前のページ」、「次のページ」、「最終ページ」に移動させます。

 

Public Sub Navigation_Command(ByVal sender As Object, _

  ByVal e As System.Web.UI.WebControls.CommandEventArgs) _

  Handles Navigation.Command

  MovePage(e.CommandName)

End Sub

 

 

Tip  ASP.NET 2.0GridViewはページ移動ボタンとページ番号が混在できる

DataGridの後継版GridViewでは、ページ移動ボタン(先頭ページ、最終ページ)とページ番号を混在させることができます。また、ページングと並べ替えがコードレスで実現できます。

 

 

図5: DataGridにカスタムボタン表示

 

 

リスト3: ページ移動ボタンを有効/無効に切り替える

Sub SetButtons()

  Dim boolFirstPage As Boolean = _

    IIf(DataGrid1.CurrentPageIndex = 0, True, False)

  Dim boolLastPage As Boolean = _

    IIf(DataGrid1.CurrentPageIndex = DataGrid1.PageCount - 1, True, False)

  btnFirst.Enabled = Not boolFirstPage

  btnPrevious.Enabled = Not boolFirstPage

  btnNext.Enabled = Not boolLastPage

  btnLast.Enabled = Not boolLastPage

End Sub

 

 

リスト4: ページ移動ボタンに対応させてページを移動させる

Sub MovePage(ByVal strDirection As String)

  With DataGrid1

    Select Case strDirection

      Case "first"

        .CurrentPageIndex = 0

      Case "prev"

        If .CurrentPageIndex > 0 Then

          .CurrentPageIndex -= 1

        End If

      Case "next"

        If .CurrentPageIndex < (.PageCount - 1) Then

          .CurrentPageIndex += 1

        End If

      Case "last"

        .CurrentPageIndex = .PageCount - 1

    End Select

  End With

  BindDataGrid()

End Sub

 

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