DataListDataReaderをバインドするには

 

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

 

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

 

このサンプルは、DataListDataReaderをバインドして表示しています。DataListHeaderTemplate, ItemTemplate, FooterTemplateHTML<table>…</table>タグを挿入して表形式で表示しています。

 

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

 

   DataReaderを生成する方法

   DataListDataReaderをバインドする方法

   DataListHeaderTemplate, ItemTemplate, FooterTemplateの使い方

   DataListHTML<table>…</table>を挿入して表形式で表示する方法

 

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

 

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

 

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

 

DataListにバインドされたOleDbDataReaderを表示するには、ItemTemplateにカラム名を指定します。行3740では、OleDbDataReaderのカラムLongNameShortNameを表示させています。このサンプルでは、HeaderTemplate, ItemTemplate, FooterTemplateHTML<table>…</table>タグを挿入してデータを表形式で表示しています。

 

29: <asp:DataList id="dlstVsNet" runat="server"
 30:   EnableViewState="False">
 31:   <HeaderTemplate>
 32:     <table border="1">
 33:   </HeaderTemplate>
 34:   <ItemTemplate>
 35:     <tr>
 36:       <td>
 37:         <%# Container.DataItem("LongName") %>
 38:       </td>
 39:       <td>
 40:         <%# Container.DataItem("ShortName") %>
 41:       </td>
 42:     </tr>
 43:   </ItemTemplate>
 44:   <FooterTemplate>
 45:     </table>
 46:   </FooterTemplate>
 47: </asp:DataList>

 

Tip

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

 

DataReaderをクラス化するには、レコードを格納するクラスとレコード郡を格納するコレクションを作成します。レコード郡を格納するコレクションクラスは、ArrayListのサブクラスとして作成します。ArrayLastのサブクラスとしてコレクションを作成するには、行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
 16:  
 17:   Public Sub New(strLongName, strShortName)
 18:     m_strLongName = strLongName
 19:     m_strShortName = strShortName
 20:   End Sub
 21:  
 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
 30:  
 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

 

OleDbDataReaderをクラスに格納するには、コレクションのインスタンスを生成してAdd()メソッドでレコードを追加します。行53では、VisualStudioCollectionのインスタンスを生成しています。行57-59While…End Whileでは、VisualStudioCollectionAdd()メソッドでVisutalStudioクラスを追加しています。VisualStudio()の引数には、LongName/ShortNameプロパティを指定します。LongNameには、OleDbDataReaderのカラム(LongName)の値を設定しています。ShortNameには、OleDbDataReaderのカラム(ShortName)の値を設定しています。行63では、DataListDataSourceプロパティにVisualStudioCollectionを設定して、DataBind()メソッドでバインドしています。

 

47: Sub BindData()
 48:   Dim strSQL as String = "Select * From tblVsDotNet"
 49:   Dim strCon as String = ConfigurationSettings.AppSettings("conStringNw")
 50:   Dim con As OleDbConnection = New OleDbConnection(strCon)
 51:   Dim cmd As OleDbCommand = New OleDbCommand(strSQL, con)
 52:   Dim dr As OleDbDataReader
 53:   Dim colVs As New VisualStudioCollection()
 55:   con.Open()

56:   dr = cmd.ExecuteReader()
 57:   While dr.Read()
 58:     colVs.Add(New VisualStudio(dr("LongName"), dr("ShortName")))
 59:   End While
 60:   dr.Close()
 61:   con.Close()
 62:   With dlstVsNet
 63:     .DataSource = colVs
 64:     .DataBind()
 65:   End With
 66: End Sub

 

OleDbDataReaderをクラス化すると、プレゼンテーションレイヤー(Presentation Layer)とデータアクセスレイヤー(Data Access Layer)を完全に分離してN-TierWebアプリケーションを開発することができます。行48-61のデータベースをアクセスする部分をクラス化する方法については、後述するTipで解説します。

 

 

ASP.NET DataListのホームへ戻る