ASP.Netのお勉強

GridViewのDataSourceとページング@ASP.Net

GridView、DataSource、DataTableを用いたページング処理です。
SqlDataSourceを用いた時は、問題なくページングができたのですが、
このパターンだとページングが上手くいきません。

PageIndexChangingをハンドルして、ページング処理を書きます。
GridViewのページ番号を新しいページ番号に設定します。
再度SQL文を発行して、DataTableを作成します。
GridViewのDataSourceに配置して、DataBind処理を行います。

●aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>View</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="5">
        </asp:GridView>
    </div>
    </form>
</body>
</html>


●vb

Imports System.Data.SqlClient
Imports System.Data

Partial Class test
    Inherits System.Web.UI.Page


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            'DataSourceを設定し、DataBind処理
            myGridBind()
        End If
    End Sub

    Protected Sub gridView1PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging

        'ページ番号設定
        Me.GridView1.PageIndex = e.NewPageIndex
        '再度DataSourceを設定し、DataBind処理
        Me.myGridBind()

    End Sub

    Protected Sub myGridBind()

        Dim dbcon As SqlConnection
        Dim dbcmd As SqlCommand
        Dim dataRead As SqlDataReader

        Dim dt As DataTable
        Dim dr As DataRow

        Dim sqlStr As String
        Dim sqlUrl As String

        '接続文字列
        sqlUrl = "data source=(local)\SQLEXPRESS;initial catalog=DB;user id=id;password=pass;persist security info=True;packet size=4096"

        'DBコネクション作成
        dbcon = New SqlConnection(sqlUrl)

        'DB接続
        dbcon.Open()

        'SQL文(NOの降順で取得)
        sqlStr = "SELECT ID,NAME FROM TABLE"

        'SQLコマンド作成
        dbcmd = New SqlCommand(sqlStr, dbcon)

        'SQL文実行
        dataRead = dbcmd.ExecuteReader()

        'データテーブル作成
        dt = New DataTable()

        dt.Columns.Add(New DataColumn("ID", GetType(String)))
        dt.Columns.Add(New DataColumn("NAME", GetType(String)))

        '結果を読み込み
        Dim bbsStr As String = ""
        While (dataRead.Read())
            dr = dt.NewRow()

            dr(0) = dataRead("ID")
            dr(1) = dataRead("NAME")
            dt.Rows.Add(dr)
        End While

        'DataSourceに設置
        Me.GridView1.DataSource = dt.DefaultView
        Me.GridView1.DataBind()

        'DBクローズ処理
        dataRead.Close()
        dbcmd.Dispose()
        dbcon.Close()
        dbcon.Dispose()

    End Sub

End Class

Copyright (C) ASP.Netのお勉強. All Rights Reserved.