ASP.NET DataGridのホームへ戻る

DataGridDataReaderをバインドするには

 

  DataGridDataReaderをバインドするサンプル

DataGridDataReaderをバインドするサンプル

 

このサンプルは、DataGridDataReaderを生成してバインドしています。DataGridAutoGenerateColumnsプロパティにTrueを設定してDataReaderのカラムを自動生成させています。

 

このサンプルでは、以下のノウハウを習得することができます。

 

  DataReaderを生成する方法

  DataGridDataReaderをバインドする方法

 

このサンプルでは、OleDbConnection, OleDbCommandクラスを使用してAccess/SQL ServertblVsDotNetテーブルを読み込んでOleDbDataReaderを生成します。行13では、tblVsDotNetテーブルからレコードを抽出するSQLを生成しています。行14では、Web.configに登録されているデータベースの接続情報を取得しています。行15では、OleDbConnectionのインスタンスを生成しています。OleDbConnectionの引数には、データベースの接続情報を指定します。行16では、OleDbCommandのインスタンスを生成しています。OleDbCommandの引数には、SQLコマンドとOleDbConnectionを指定します。

 

18では、OleDbConnectionOpen()メソッドでデータベースを開いています。行19-22With…End Withでは、DataGridの各種プロパティを設定してOleDbDataReaderをバインドしています。行20では、OleDbCommandExecuteReader()メソッドでSQLSelectステートメントを実行してOleDbDataReaderを生成してDataGridDataSourceプロパティに設定しています。ExecuteReader()メソッドの引数に、CommandBehavior.CloseConnectionを指定すると、OleDbDataReaderが解放されるときにデータベースが自動的に閉じられます。行21では、DataGridDataBind()メソッドでOleDbDataReaderをバインドしています。これで、OleDbDataReaderのすべてのカラムが自動生成されてDataGridに表示されます。

 

12: Sub BindData()
 13:   Dim strSQL as String = "Select * From tblVsDotNet"
 14:   Dim strCon as String = ConfigurationSettings.AppSettings("conStringNw")
 15:   Dim con As OleDbConnection = New OleDbConnection(strCon)
 16:   Dim cmd As OleDbCommand = New OleDbCommand(strSQL, con)
 18:   con.Open()
 19:   With dgrdVsNet
 20:     .DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
 21:     .DataBind()
 22:   End With
 23: End Sub

 

Tip

DataReaderをクラス化してDataGridにバインドするには

 

DataReaderをクラス化するには、レコードを格納するVisualStudioクラスとレコード郡を格納するVisualStudioCollectionクラスを作成します。VisualStudioCollectionは、ArrayListのサブクラスとして作成します。ArrayListのサブクラスとして作成するには、行7のようにInherits ArrayListのように記述します。これでVisualStudioCollectionは、ArrayListをベースに作成されますのでArrayListがサポートしているすべてのプロパティとメソッドが使用できます。

 

  6: Public Class VisualStudioCollection
  7:   Inherits ArrayList
  9:   Public Sub New()
 10:   End Sub
 11: End Class

 

レコードを格納するVisualStudioクラスには、カラムのプロパティLongNameShortNameを追加します。

 

13: Public Class VisualStudio
 14:   Private m_strLongName As String
 15:   Private m_strShortName As String
 17:   Public Sub New(strLongName, strShortName)
 18:     m_strLongName = strLongName
 19:     m_strShortName = strShortName
 20:   End Sub
 22:   Public Property LongName As String
 23:     Get
 24:       Return m_strLongName
 25:     End Get
 26:     Set
 27:       m_strLongName = value
 28:     End Set
 29:   End Property
 31:   Public Property ShortName As String
 32:     Get
 33:       Return m_strShortName
 34:     End Get
 35:     Set
 36:       m_strShortName = value
 37:     End Set
 38:   End Property
 39: End Class

 

VisualStudioMethodsクラスには、GetLanguages()メソッドがサポートされています。このメソッドは、Access/SQL ServertblVsDotNetテーブルからレコードを抽出してVisualStudioCollectionに格納して返します。

 

41: Public Class VisualStudioMethods
 42:   Public Shared Function GetLanguages() As VisualStudioCollection
 43:     Dim strSQL as String = "Select * From tblVsDotNet"
 44:     Dim strCon as String = ConfigurationSettings.AppSettings("conStringNw")
 45:     Dim con As OleDbConnection = New OleDbConnection(strCon)
 46:     Dim cmd As OleDbCommand = New OleDbCommand(strSQL, con)
 47:     Dim dr As OleDbDataReader
 48:     Dim colVs As New VisualStudioCollection()
 50:     con.Open()
 51:     dr = cmd.ExecuteReader()
 52:     While dr.Read()
 53:       colVs.Add(New VisualStudio(dr("LongName"), dr("ShortName")))
 54:     End While
 55:     dr.Close()
 56:     con.Close()
 57:     Return colVs
 58:   End Function
 59: End Class

 

GetLanguages()メソッドで取得したVisualStudioCollectionDataGridにバインドするには、行69のように記述します。行70DataBind()メソッドで、VisualStudioCollectionに格納されているレコードが表示されます。このようにDataReaderをクラス化することにより、N-Tire対応のWebアプリケーションを開発することができます。Webアプリケーションをプレゼンテーションレイヤー(Presentation Layer)とデータアクセスレイヤー(Data Access Layer)に分離することにより保守性がよくなります。たとえば、データベースをSQL ServerからOracleに移行する場合、Data Access LayerOracle用に入れ換えるだけでPresentation Layerは変更する必要がありません。

 

なお、ここで紹介したVisualStudio, VisualStudioCollection, VisualStudioMethodsのクラスは、コンパイルしてDLL化してWebアプリケーションのbinディレクトリに格納しておきます。この場合、ASPXファイルからは、<%@ Import Namespace=”MyVisualStudio” %>のように記述してインポートします。

 

67: Sub BindData()
 68:   With dgrdVsNet
 69:     .DataSource = VisualStudioMethods.GetLanguages()
 70:     .DataBind()
 71:   End With
 72: End Sub

 

 

ASP.NET DataGridのホームへ戻る