「ASP.NET GridViewのページングを行う。 DataSourceコントロールを使用している場合。」で説明した方法は、DataSourceコントロールを使用して、GridViewにバインドさせているときの方法でした。
コード上でDataSetを作成し、GridViewにバインドさせている場合では、上記のページの方法では機能しません。
GridViewのページングの方法が記載されているWEBページなどでは、「GridViewのプロパティの「AllowPaging」を「True」にする」程度しか説明されていない場合が多いため、実際には「AllowPaging」を「True」にしただけではページング機能は有効になりません。
でも、「AllowPaging」を「True」にする必要はあります。
では、その方法を。。。。
>>>
>>>
まずaspxファイルに配置されたGridViewのプロパティの、「AllowPaging」を「True」にします。
下図のようにGridViewの下にページの数値が表示されます。
次からは、コード上で設定をしていきます。
1:GridViewにデータをバインドさせる。
<コード>
============================================================
Dim ds As DataSet
Dim sql As String
sql = "SELECT * FROM test"
'データを取得します。
'data()は、私が勝手に作っている関数なので、
'ここは、DataSetを取得する方法を取ってください。
ds = data(sql)
'GridViewにデータをセットします。
GridView2.DataSource = ds
GridView2.DataBind()
'ここがミソ。
'データセットを後でも使いたいので
'Sessionオブジェクトに格納。 Session("data") = ds
============================================================
2:GridViewの「PageIndexChanging」イベントで、処理を行う。
<コード>
============================================================
Private Sub GridView2_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView2.PageIndexChanging
'第二引数から、選択されたページindexを取得。
'GridViewのページIndexに設定。 GridView2.PageIndex = e.NewPageIndex
'GridViewに再度データをバインドさせる。
'先ほどのデータセットを格納。
GridView2.DataSource = Session("data")
GridView2.DataBind()
End Sub
============================================================
この方法で実現できました。
要するに、「PageIndexChanging」で再度データをバインドさせる必要があるということですね。
今回私の例では、一度取得したDataSetを使いまわすという方法ですので、使いまわしているうちにデータに変化があった場合は反映されません。
常に最新のデータで表示させる必要があるのでしたら、「PageIndexChanging」ごとにデータを取得する必要がありますね。
ありがとうございます。