ASP.NET のデータ連結について

文書翻訳 文書翻訳
文書番号: 307860 - 対象製品
この記事は、以前は次の ID で公開されていました: JP307860
この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • System.Data
  • System.Data.SqlClient
すべて展開する | すべて折りたたむ

目次

概要

この資料では、ASP.NET のデータ連結について説明します。

ASP.NET の概要については、以下のサポート技術情報を参照してください。
305140 ASP.NET ロードマップ

詳細

ASP.NET のデータ連結では、あらゆるサーバー コントロールを単純なプロパティ、コレクション、式、およびメソッドに連結できます。データ連結を使用すると、データベースまたはその他の方法で提供されるデータを使用する場合の柔軟性が高まります。

この資料では、データ連結に関する以下のトピックを扱います。

データ連結の基礎

<%# %> 構文

ASP.NET では新しい宣言構文 <%# %> が導入されています。これは .aspx ページ内でデータ連結を使用する場合の基礎となる構文です。すべてのデータ連結式は、これらの記号の中に入れる必要があります。以下の例は、さまざまなソースからの単純なデータ連結を示したものです。
  • 単純なプロパティ (customer の構文)
    <%# custID %>
    					
  • コレクション (order の構文)
    <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
    					
  • 式 (contact の構文)
    <%# ( customer.First Name + " " + customer.LastName ) %>
    					
  • メソッドの結果 (outstanding balance の構文)
    <%# GetBalance(custID) %>
    					
上記の例では、インラインの <%# %> タグによって、特定のデータ ソースからの情報を .aspx ページ内のどこに配置するかを指定しています。以下のデータ連結例では、TextBox Web サーバー コントロールを使用します。
<asp:textbox id=txt text="<%# custID %>" runat=server />
				
データ連結構文の詳細については、以下の .NET Framework Software Development Kit (SDK) ドキュメントを参照してください。
データ連結式構文
http://msdn2.microsoft.com/ja-jp/library/bda9bbfx(vs.71).aspx

Page.DataBind() versus Control.DataBind()

.aspx ページ上のオブジェクトに対して、特定のデータ ソースを指定し、設定した後、これらのデータ ソースにデータを連結する必要があります。データをデータ ソースに連結するには、Page.DataBind メソッドまたは Control.DataBind メソッドを使用できます。

この 2 つのメソッドの動作はよく似ています。主な違いは、Page.DataBind メソッドが呼び出された後は、すべてのデータ ソースがサーバー コントロールに連結されるという点です。明示的に Web サーバー コントロールの DataBind メソッドを呼び出すか、ページ レベルの Page.DataBind メソッドを呼び出すまで、データはコントロールにレンダリングされません。一般に、Page.DataBind (または、DataBind) は、Page_Load イベントから呼び出されます。

DataBind メソッドの詳細については、以下の .NET Framework SDK ドキュメントを参照してください。

Control.DataBind メソッド
http://msdn.microsoft.com/ja-jp/library/w5e5992d.aspx

データ連結リスト コントロール

リスト コントロールは、コレクションに連結できる特殊な Web サーバー コントロールです。これらのコントロールを使用すると、複数行のデータをカスタマイズされたテンプレート形式で表示できます。すべてのリスト コントロールは、コレクションへの連結に使用される DataSource プロパティおよび DataMember プロパティを公開します。

これらのコントロールでは、その DataSource プロパティを、IEnumerable、ICollection、または IListSource の各インターフェイスをサポートする任意のコレクションに連結できます。

Repeater コントロール

Repeater コントロールは、テンプレートを使用するデータ連結リストです。このコントロールには、"外観がない"、つまり、組み込みのレイアウトやスタイルが一切ありません。したがって、すべての HTML レイアウト、書式設定、およびスタイル タグをコントロールのテンプレートで明示的に宣言する必要があります。

以下のコード サンプルは、リスト コントロールの 1 つである Repeater コントロールを使用してデータを表示する方法を示したものです。

注: 使用する環境に合わせて接続文字列のパラメーターを変更する必要があります。

Visual Basic .NET
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
"database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
Repeater1.DataSource = ds
Repeater1.DataBind()

End Sub
</script>
<html>
<body>
<form id="Form1" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
	 </ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
				
Visual C# .NET
<%@ Page language="c#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
SqlConnection cnn = new 
SqlConnection("server=(local);database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds, "authors"); 
Repeater1.DataSource = ds.Tables["authors"];
Repeater1.DataBind();
}
</script>
<html>
<body>
<form id="WebForm2" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
	 </ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
				
Visual J# .NET
<%@ Page language="VJ#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
SqlConnection cnn = new SqlConnection("server=(local);database=pubs;Integrated
Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds, "authors"); 
DataTableCollection dtc = ds.get_Tables();
int index = dtc.IndexOf("authors");
Repeater1.set_DataSource(dtc.get_Item(index));
Repeater1.DataBind();
}
</script>
<html>
<body>
<form id="WebForm2" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
				
Repeater コントロールの詳細については、以下の .NET Framework SDK ドキュメントを参照してください。
Repeater Web サーバー コントロール
http://msdn.microsoft.com/ja-jp/library/x8f2zez5.aspx

DataList コントロール

DataList クラスは、豊富な機能を備えた、テンプレートを使用するデータ連結リストです。テンプレートを変更して、このコントロールをカスタマイズできます。Repeater コントロールとは異なり、DataList は表示方向を指定するレンダリングをサポートしています。また、オプションで、HTML テーブルでの実行時レンダリングも可能です。

DataList コントロールの詳細については、以下の .NET Framework SDK ドキュメントを参照してください。
DataList Web サーバー コントロール
http://msdn.microsoft.com/ja-jp/library/9cx2f3ks(VS.85).aspx

DataGrid コントロール

DataGrid コントロールは、完全な機能を備えた複数列のデータ連結グリッドです。DataGrid 内の個々の列のレイアウトをカスタマイズするには、列のタイプを "templated" に設定して列のテンプレートを変更します。DataGrid コントロールは、テンプレートを使用せずにレンダリングできるため、レポートを作成する場合に役に立ちます。また DataGrid では、列およびボタン列による選択、編集、削除、ページング、およびソートをサポートしています。

DataGrid コントロールの詳細については、以下の .NET Framework SDK ドキュメントを参照してください。
DataGrid Web サーバー コントロール
http://msdn.microsoft.com/ja-jp/library/aa710742(VS.71).aspx

データへのアクセス

ここでは、データベースのデータにアクセスし、データをリスト コントロールに連結する方法について説明します。データベースからデータを取得するには、DataSet クラスまたは DataReader クラスを使用します。

DataSet クラス

DataSet には、テーブルの構造、テーブル間の関係、データの順序付けを含む、データの完全な表現が含まれています。DataSet クラスは柔軟性が高く、データベースから XML (Extensible Markup Language) ファイルまで、あらゆる種類の情報を格納できます。また、状態を保持しないため、サーバーの接続リソースを占有することなく、クライアントからサーバーにこのクラスを渡すことができます。以下のコード サンプルは、DataSet を使用してデータをコントロールに連結する方法を示したものです。

注: 使用する環境に合わせて接続文字列のパラメーターを変更する必要があります。

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
"database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
MyRepeater.DataSource = ds
MyRepeater.DataBind() 
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds);
MyRepeater.DataSource = ds;
MyRepeater.DataBind(); 
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
MyRepeater.set_DataSource(ds);
MyRepeater.DataBind();
				
DataSet クラスの詳細については、以下の .NET Framework SDK ドキュメントを参照してください。
DataSet クラス
http://msdn2.microsoft.com/ja-jp/library/system.data.dataset(vs.71).aspx

DataReader クラス

一方、レンダリングするデータを表示するのみで変更する必要がない場合は、DataReader クラスの方がソリューションとして適している場合があります。たとえば、DataReader は前方スクロールのみのデータ カーソルであるため、DropDownList コントロールには DataReader の方が適しています。以下のコード サンプルは、SqlDataReader クラスを使用してデータをコントロールに連結する方法を示しています。

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
"database=pubs;Integrated Security=SSPI")
Dim cmd As SqlCommand = New SqlCommand("select * from authors", cnn)

cnn.Open()
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
MyRepeater.DataBind()
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
database=pubs;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
MyRepeater.DataBind();
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
database=pubs;Integrated Security=SSPI"); 

SqlCommand cmd = new SqlCommand("select * from authors", cnn); 

cnn.Open();
MyRepeater.set_DataSource(cmd.ExecuteReader(CommandBehavior.CloseConnection));
MyRepeater.DataBind();
				
SqlDataReader クラスおよび ASP.NET でのデータ アクセスの詳細については、以下の .NET Framework SDK ドキュメントのトピックを参照してください。
SqlDataReader クラス
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqldatareader.aspx

高パフォーマンス ASP.NET アプリケーションの開発
http://msdn2.microsoft.com/ja-jp/library/5dws599a(vs.71).aspx

リスト コントロール テンプレートでの連結

リスト コントロールでテンプレートを使用すると、データ ソースの個々のレコードに連結し、カスタマイズすることができます。ここでは、この処理を行う 3 つの方法について説明します。

DataBinder.Eval メソッド

データ ソースがデータベースから返されるデータを扱う場合、データ ソースには多数の情報が含まれます。汎用の DataBinder.Eval メソッドを使用してデータを返すことができます。以下のコード サンプルでは、コンテナー オブジェクトのデータ ソースから "au_id" フィールドが返されます。
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
				
DataBinder.Eval メソッドの詳細については、以下の .NET Framework SDK ドキュメントを参照してください。
DataBinder.Eval メソッド
http://msdn.microsoft.com/ja-jp/library/4hx47hfe.aspx

明示的なキャスト

さらに幅広い制御が必要な場合は、明示的なキャストを使用します。明示的な変換では型変換キーワードを使用します。これらのキーワードは関数として動作しますが、コンパイラがインラインでコードを生成するため、実行速度は関数呼び出しよりも若干速くなります。以下のコード サンプルでは、明示的なキャストを使用しています。

Visual Basic .NET
' DataSource として DataTable を使用
<%# CType(Container.DataItem, System.Data.DataRowView)("au_id") %>

' DataSource として DataReader を使用
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_id") %>

' DataSource として DataReader を使用
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)(0) %>
				
Visual C# .NET
// DataSource として DataTable を使用
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataSource として DataReader を使用
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataSource として DataReader を使用
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Visual J# .NET
// DataSource として DataTable を使用
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataSource として DataReader を使用
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataSource として DataReader を使用
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
上記のサンプルでは、DataSet のサブセットである DataTable、または DataReader のいずれかをデータ ソースとして使用しています。

ItemDataBound event

それぞれのコントロールの ItemDataBound イベントを使用してデータを連結することもできます。このイベントは、コントロールにアイテムがデータ連結されたときに発生します。以下の HTML コード サンプルでは、ItemTemplate と共に Repeater コントロールを定義しています。
<asp:repeater id=rptr runat=server>
<itemtemplate>
<asp:label id=lblAuthorID runat=server />
</itemtemplate>
</asp:repeater>
				
ページ内には以下のメソッドが必要です。

Visual Basic .NET
public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
  
'TODO:データベースからデータを取得し、
'そのデータをリスト コントロールに連結する。

End Sub

public Sub rptr_OnItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptr.ItemDataBound
Dim rec As DataRowView
rec = e.Item.DataItem

'データが存在することを確認する。
If Not IsDBNull(rec) Then
Dim l1 As Label
l1 = e.Item.FindControl("lblAuthorID")
l1.Text = rec("au_id").ToString()
End If
End Sub
				
Visual C# .NET
public void Page_Init(object sender, System.EventArgs e)
{
rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load(object sender, System.EventArgs e)
{
// TODO: データベースからデータを取得し、
// そのデータをリスト コントロールに連結する。
}
public void rptr_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
e.Item.DataItem;
if(rec!=null) //データが存在することを確認する。
   {
Label l1 = (Label)e.Item.FindControl("lblAuthorID");
l1.Text = rec["au_id"].ToString();
   }
}
				
Visual J# .NET
public void Page_Init(Object sender, System.EventArgs e)
{
rptr.add_ItemDataBound(new RepeaterItemEventHandler(rptr_OnItemDataBound));
}
private void Page_Load(Object sender, System.EventArgs e)
{
// TODO: データベースからデータを取得し、
// そのデータをリスト コントロールに連結する。
}
public void rptr_OnItemDataBound(Object sender, RepeaterItemEventArgs e)
{
System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
e.get_Item().get_DataItem();
if (rec != null) //データが存在することを確認する。
            {
Label l1 = (Label)e.get_Item().FindControl("lblAuthorID");
l1.set_Text(((rec.get_Item("au_id")).ToString()));
            }
}
				
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。

プロパティ

文書番号: 307860 - 最終更新日: 2013年8月23日 - リビジョン: 2.0
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
キーワード:?
kbarttyperoadmap kbdatabinding kbinfo kbservercontrols KB307860
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com