従来の ASP に精通している場合は、関数が同じでなくても、ASP.NET のデータ バインディング構文に精通しているはずです。データ バインディングの表現は、ASPX ファイルの <%# と %> の間のコードです。これにより、データをコントローラーにバインドできるだけでなく、ページ上のプロパティ、式、メソッド呼び出しの結果もコントローラーにバインドできるようになります。この機能は簡単に使用できますが、どのコンテンツをバインドできるか、またそのコンテンツが使用されているかどうかを判断する際に混乱が生じることがあります。
データ バインディング要素
ページの ASP.NET の DataBind メソッドが呼び出されるとき、データ バインディング式は ASP.NET のプロパティ、サーバー コントロール プロパティ、およびデータ ソースにリンクされます。サーバー制御のタブまたはページ上の任意の場所を開くときに、属性値と値のペアの数値側に式を配置できます。すべてのデータ バインディング式は、どこに配置されても、<%# および %> 文字で囲まれます。
データ コントローラー (Repeater、DataGrid など) を使用する場合、式のパラメーターは通常、データ ソースの列名です。いずれにせよ、値を返す限り、有効な式はどれでも使用できます。同様に、同じ構文を外部リスト コントロールに使用できます。これには、ページ上での値の表示や、コントローラーのプロパティの組み立てが含まれます。
Container.DataItem は、特定の項目の DataItem のランタイム エイリアスです。データ クエリの行やベクトルの単一要素など、データ ソースからの単一の項目をマップします。 DataItem の実際のデータ型はデータ ソースによって決まります。したがって、整数のベクトルを扱う場合、DataItem も整数になります。
次のリストでは、VB.NET 構文の状況をいくつか確認します。
<%# Container.DataItem %> -- 文字列ベクトルを返します。
<%# Container.DataItem("expression") %> -- DataView コンテナ内の特定の項目を返します。 フィールド
< %# Container.DataItem.PropertyName %> -- データ ソース内の特定の文字列のプロパティ値を返します。
<%# CStr(Container.DataItem.PropertyName) %> -- プロパティ値を返し、次の場合に
文字列形式に変換します。
C# を使用する場合、構文は若干異なります。次のリストには、上記のリストに対応する C# コードが含まれています。基本的な構文は同じですが、返される属性値とデータ型の変換に変更があることに注意してください。
<%# Container.DataItem %>
<%# ((DataRowView)Container.DataItem)["PropertyName"] %>
<%# ((ObjectType)Container.DataItem).PropertyName %>
<%# ((ObjectType)Container. DataItem).PropertyName.ToString() %>
ページのプロパティとメソッドを操作する場合、構文は一貫しています。文字列値が返される限り、構文はまったく同じです。次のリストに例を示します。
<%# propertyName %>-- ページ レベルのプロパティ値を返します
<asp:ListBox id="lstValues" datasource='<%# propertyName %>' runat="server">--データ コントローラーにバインドされたページ レベルのプロパティ値 (ベクトル、オブジェクト セットなど) と同じものを返します
<%# (objectName.PropertyName) %>-- ページ レベルのオブジェクト プロパティ値を表示します
<%# MethodName() %>--ページ メソッドの戻り値を表示します。
ページ上で単一の値 (プロパティやメソッドなどによって返される値) を使用するには、次の構文を使用します。
<%= Value %>
リスト A の C# コードはデータを示しています。 ASP.NET Web フォームでのバインディング。 SQL Sever Northwind Employees テーブルから従業員の名前と電話番号を選択します。クエリ値は、ASP.NET リピーター コントローラーを通じて表示されます。列の値はデータ バインディングを介して挿入されます。テーブルのフォーム タイトルはメソッド呼び出しを通じて組み立てられます。さらに、Dataitem の ItemIndex プロパティは行数を表示するために使用されます。 ItemIndex プロパティは 0 から始まり、表示ごとに 1 ずつ増加します。
リスト B には、同等の VB.NET コードが含まれています。主な違いは、VB.NET では括弧が使用され、C# では角括弧が使用されることです。また、VB.NET では行キャストは不要です。
Contain.DataItem の使用は、データ型とデータ型変換に常に注意を払う必要があるため、少し面倒です。 Microsoft は、開発をさらに簡素化できる DataBinder クラスを提供しています。
DataBinder の使用
DataBinder クラスについては、Microsoft ドキュメント (MSDN) で詳しく説明されています。この方法により、RAD 設計者は解析されたデータ バインディング構文を簡単に生成できます。このメソッドは、Web フォームのページ宣言で使用して、あるタイプから別のタイプへのマッピングを簡素化することもできます。
ASP.NET ページでデータ値を使用する場合、DataBinder クラスの Eval メソッドを使用して、面倒な作業を .NET に実行させることができます。 Eval メソッドは、以前にオーバーライドされた Container.DataItem オブジェクトを受け取り、式内の指定された各フィールドの詳細データを計算して表示します。構文は次のとおりです。
DataBinder.Eval(Container.DataItem, "field name", "optional formatting")
この構文を使用すると、DataBinder.Eval を使用して最初の例を書き直すことができます。その C# コードについては、リスト C を参照してください。リスト D には、VB.NET と同等のコードが含まれています。
DataBinder.Eval は、システムに作業をプッシュするのに非常に強力ですが、システムが要素を見つけてオブジェクト/データ型を決定するための時間とリソースのオーバーヘッドが高いことにも注意してください。
豊富なオプションの
データ バインディングにより、ASP.NET ページへのデータの配置が比較的簡単になります。データをコントローラーにバインドしてその表示方法を決定する、または ASP.NET ページで宣言されたコントローラーにデータをバインドすることを選択するなど、さまざまなデータ バインディング オプションから選択できます。結局のところ、それはあなたの好みになりますが、選択肢が多いことは最終的には良いことです。
Tony Patton はソフトウェア開発者としてキャリアをスタートし、Java、VB、Lotus、XML の認定資格を取得しています。