単一属性 | Customer: <%# custID %> |
コレクション注文 | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
式 連絡先 | <%# ( customer.FirstName + " " + customer.LastName ) %> |
メソッド | Outstanding Balance の戻り値: <%# GetBalance(custID) %> |
上記の構文は ASP の Response.Write 便利な構文 (<%= %>) に似ていますが、その動作は次のとおりです。明らかに違う。 ASP Response.Write 便利な構文はページの処理中に値を計算しますが、ASP.NET データ バインディング構文は DataBind メソッドが呼び出されたときにのみ値を計算します。
DataBind は、ページおよびすべてのサーバー コントロールのメソッドです。親コントロールの DataBind を呼び出すと、すべての子コントロールの DataBind メソッドが順番に呼び出されます。たとえば、DataList1.DataBind() は、DataList テンプレート内のすべてのコントロールの DataBind メソッドを呼び出します。ページの DataBind メソッド -- Page.DataBind() を呼び出すか、単に DataBind() を呼び出すと、ページ上のすべてのデータ バインディング式が評価されます。次の例に示すように、DataBind メソッドは通常、ページの Page_Load イベントでのみ呼び出されます。
.aspx ページの宣言セクションでは、バインディング構文を使用して、ランタイムの評価に必要なデータ型を指定できます。上記の例の単純なプロパティ、式、メソッドは、評価時にテキスト コンテンツをユーザーに表示します。この場合、データ バインディング式の値は String 型です。上記のコレクションの例では、データ バインディング構文の値の型は ListBox の DataSource プロパティです。望ましい結果を生成するには、バインディング式で値の型をキャストする必要があることがわかります。たとえば、count が整数の場合:
レコード数: <%# count.ToString() %>
ASP.NET データ バインディング構文は、パブリック変数、ページ プロパティ、およびページ内の他のコントロールのプロパティのバインドをサポートします。次の例は、ページのパブリック変数と単純なプロパティにバインドする方法を示しています。これらの値は DataBind() が呼び出される前に初期化されていることに注意してください。
<スクリプト言語="VB" runat="サーバー">
Sub Page_Load(オブジェクトとして送信者、EventArgsとして)
ページ.データバインド
End Sub
ReadOnly プロパティ custID() を文字列として
得る
「アルフキ」を返す
終了取得
End プロパティ
ReadOnly プロパティ orderCount() As Integer
得る
リターン11
終了取得
終了プロパティ
</スクリプト>
<form action="DataBind1_vb.aspx" runat="server">
顧客: <b><%# custID %></b><br />
オープンオーダー: <b><%# orderCount %></b>
</form>
次の例は、別のコントロールのプロパティにバインドする方法を示しています。
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
選択された状態: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
リスト タイプのサーバー コントロール (DropDownList、ListBox、HTMLSelect など) は、コレクションをデータ ソースとして使用します。次の例は、共通言語ランタイム コレクション型にバインドする方法を示しています。これらのコントロールは、Ienumerable、Icollection、または IlistSource インターフェイスをサポートするコレクションにのみバインドできます。より一般的には、ArrayList、Hashtable、DataView、および DataReader にバインドできます。次の例は、ArrayList にバインドする方法を示しています。
Sub Page_Load(オブジェクトとして送信者、EventArgsとして)
そうでない場合はPostBack
ArrayList= new ArrayList() としての Dim 値
値.Add("IN")
値.Add("KS")
値.Add("MD")
値.Add("MI")
値.追加 ("OR")
値.Add ("TN")
DropDown1.DataSource = 値
DropDown1.DataBind
終了の場合
End Sub
次の例は、DataView にバインドする方法を示しています。 DataView クラスは System.Data 名前空間で定義されていることに注意してください。
Sub Page_Load(オブジェクトとして送信者、EventArgsとして)
そうでない場合はPostBack
DataTable としての Dim dt
DataRow としての Dim dr
Dim i As Integer
'DataTable の作成
dt = 新しいデータテーブル
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
i = 1 ~ 9 の
データを入力します
dr = dt.NewRow()
dr(0) = i
dr(1) = "アイテム" + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
If (i Mod 2 <> 0) then
dr(3) = 真
それ以外
dr(3) = 偽
終了の場合
'テーブルにデータ行を追加 dt.Rows.Add(dr)
次の
GridView1.DataSource = 新しい DataView(dt)
GridView1.DataBind()
終了の場合
End Sub
次の例は、ハッシュテーブルにバインドする方法を示しています。
Sub Page_Load(オブジェクトとして送信者、EventArgsとして)
そうでない場合はPostBack
Dim h As Hashtable = new Hashtable()
h.Add ("key1", "value1")
h.Add ("key2", "value2")
h.Add ("key3", "value3")
MyDataList.DataSource = h
MyDataList.DataBind
終了の場合
End Sub
多くの場合、ページまたはコントロールにバインドする前にデータを処理する必要がある場合があります。次の例は、式とメソッドの戻り値にバインドする方法を示しています。
Sub Page_Load(オブジェクトとして送信者、EventArgsとして)
そうでない場合はPostBack
Dim 値を ArrayList= new ArrayList()
値として追加 (0)
値.追加(1)
値の追加 (2)
値.Add(3)
値.Add(4)
値.Add(5)
値.追加 (6)
DataList1.DataSource = 値
DataList1.DataBind
終了の場合
End Sub
Function EvenOrOdd(number As Integer) As String
If (数値 Mod 2 <> 0) then
「奇数」を返す
それ以外
「偶数」を返す
終了の場合
関数の終了
<asp:DataList id="DataList1" …>
<アイテムテンプレート>
数値: <%# Container.DataItem %>
偶数/奇数: <%# EvenOrOdd(Container.DataItem) %>
</アイテムテンプレート>
</asp:DataList>
ASP.NET Page Framework コンポーネントは、遅延バインド データ バインディング式を評価し、オプションで結果を文字列としてフォーマットする静的メソッドを提供します。この場合、DataBinder.Eval を使用すると、開発者が推定値を目的のデータ型に変換するために実行する必要がある明示的な変換作業の多くが不要になるため、便利です。これは、テンプレート化されたリストにデータ バインドされたコントロールがある場合に特に便利です。その場合、通常はデータ行とデータ フィールドの両方を変換する必要があるためです。
次の例を見てください。通貨文字列として整数を表示する必要があります。標準の ASP.NET データ バインディング構文では、まずデータ行の型を変換して、データ フィールド IntegerValue を取得する必要があります。次に、それをパラメータとして String.Format メソッドに渡します。
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
この構文は非常に複雑で、覚えるのは簡単ではありません。対照的に、DataBinder.Eval は、データ項目の名前付けコンテナー、データ フィールド名、および形式文字列の 3 つのパラメーターのみを持つ単純なメソッドです。テンプレート コントロール (FormView、GridView、DetailsView、DataList、Repeater など) では、名前付きコンテナーは Container.DataItem です。 Page は、DataBinder.Eval にも使用できる別の名前付きコンテナーです。前述したように、ASP.NET 2.0 では、DataBinder.Eval の新しい簡略化された構文 (Eval) が提供されており、これをデータ バインド コントロール テンプレートで使用して、Container.DataItem を自動的に解析できます。
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
形式文字列パラメータはオプションです。このパラメータを省略した場合、DataBinder.Eval は以下に示すようにオブジェクト型の値を返します。
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %>
注意すべき点は次のとおりです。データ バインディング構文と比較して、DataBinder.Eval は遅延バインディング リフレクションを使用するため、パフォーマンスに大きな影響を与えます。特に文字列をフォーマットする必要がない場合は、DataBinder.Eval を賢明に使用してください。