DataListにDataReaderをバインドするには
● DataListにDataReaderをバインドするサンプル

図 DataListにDataReaderをバインドするサンプル
このサンプルは、DataListにDataReaderをバインドして表示しています。DataListのHeaderTemplate, ItemTemplate, FooterTemplateにHTMLの<table>…</table>タグを挿入して表形式で表示しています。
このサンプルでは、以下のノウハウを習得することができます。
▲ DataReaderを生成する方法
▲ DataListにDataReaderをバインドする方法
▲ DataListのHeaderTemplate, ItemTemplate, FooterTemplateの使い方
▲ DataListにHTMLの<table>…</table>を挿入して表形式で表示する方法
このサンプルでは、OleDbConnection, OleDbCommandクラスを使用してAccess/SQL ServerのtblVsDotNetテーブルを読み込んでOleDbDataReaderを生成します。行14では、tblVsDotNetテーブルからレコードを抽出するSQLを作成しています。行15では、Web.configに登録されているデータベースの接続情報を取得しています。行16では、OleDbConnectionのインスタンスを生成しています。OleDbConnectionの引数には、データベースの接続情報を指定します。行17では、OleDbCommandのインスタンスを生成しています。OleDbCommandの引数には、SQLコマンドとOleDbConnectionを指定します。
行19では、OleDbConnectionのOpen()メソッドでデータベースを開いています。行20-23のWith…End Withでは、DataListの各種プロパティを設定してOleDbDataReaderをバインドしています。行21では、OleDbCommandのExecuteReader()メソッドでSQLのSelectステートメントを実行してOleDbDataReaderを生成してDataListのDataSourceプロパティに設定しています。ExecuteReader()メソッドの引数にCommandBehavior.CloseConnectionを指定すると、OleDbDataReaderが解放されるときにデータベースが自動的に閉じられます。行22では、DataListのDataBind()メソッドで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にカラム名を指定します。行37と40では、OleDbDataReaderのカラムLongNameとShortNameを表示させています。このサンプルでは、HeaderTemplate, ItemTemplate, FooterTemplateにHTMLの<table>…</table>タグを挿入してデータを表形式で表示しています。
29: <asp:DataList id="dlstVsNet"
runat="server"
30: EnableVie
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 レコードを格納するクラスには、カラムのプロパティを追加します。VisualStudioクラスには、LongNameとShortNameのプロパティがサポートされています。 13: Public Class VisualStudio OleDbDataReaderをクラスに格納するには、コレクションのインスタンスを生成してAdd()メソッドでレコードを追加します。行53では、VisualStudioCollectionのインスタンスを生成しています。行57-59のWhile…End
Whileでは、VisualStudioCollectionのAdd()メソッドでVisutalStudioクラスを追加しています。VisualStudio()の引数には、LongName/ShortNameプロパティを指定します。LongNameには、OleDbDataReaderのカラム(LongName)の値を設定しています。ShortNameには、OleDbDataReaderのカラム(ShortName)の値を設定しています。行63では、DataListのDataSourceプロパティにVisualStudioCollectionを設定して、DataBind()メソッドでバインドしています。 47: Sub BindData() 56:
dr = cmd.ExecuteReader() OleDbDataReaderをクラス化すると、プレゼンテーションレイヤー(Presentation Layer)とデータアクセスレイヤー(Data
Access Layer)を完全に分離してN-TierのWebアプリケーションを開発することができます。行48-61のデータベースをアクセスする部分をクラス化する方法については、後述するTipで解説します。 |