更新 : 2007 年 11 月
DetailsView コントロールは、データ ソースが提供するフィールドから自動的に行を生成できます。さらに、自動的に生成する代わりに表示する行のコレクションを明示的に指定することもできます。ただし、個々の行を表示する方法をカスタマイズする必要がある場合もあります。その場合は、TemplateField を作成してカスタムのレイアウトを指定します。
テンプレートの作成
TemplateField オブジェクトを使用すると、DetailsView コントロールの行のレイアウトと動作をカスタマイズするためのマークアップとコントロールを含むテンプレートを指定できます。ItemTemplate を使用すると、DetailsView コントロールが行を表示する際に使用するレイアウトを指定できます。ユーザーが新しいデータ行を挿入する際に使用するカスタム レイアウトを指定するには、InsertItemTemplate を作成します。ユーザーがデータ行を編集する際に使用するカスタム レイアウトを指定するには、EditItemTemplate を作成します。
テンプレートには、マークアップ、Web サーバー コントロール、およびコマンド ボタンを含めることができます。テンプレートの詳細については、「ASP.NET Web サーバー コントロール テンプレート」を参照してください。
テンプレートにおけるデータ バインド
テンプレートでは、Eval メソッドと Bind メソッドを使用してデータにコントロールをバインドできます。コントロールが値だけを表示する場合は、Eval メソッドを使用します。データ更新のシナリオでユーザーがデータ値を変更できるようにする場合は、Bind メソッドを使用します。Eval メソッドは、データを表示するために任意のテンプレートで使用できます。 TextBox コントロール、CheckBox コントロールなどのユーザーが値を変更する可能性があるコントロールを含むテンプレートまたはレコードの削除を許可するテンプレートでは Bind メソッドを使用します。詳細については、「データ バインド式の概要」を参照してください。
例
DetailsView コントロールの Fields コレクションの例を次に示します。このコレクションは TemplateField オブジェクトを含み、このオブジェクトはさらに ItemTemplate、InsertItemTemplate、EditItemTemplate の各オブジェクトを含みます。日付を表示するために、ItemTemplate には Eval メソッドを使用する Label コントロールが含まれます。他のテンプレートは、日付を挿入または編集するために、Bind メソッドを使用する Calendar コントロールを使用します。
<Fields>
<asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/>
<asp:BoundField DataField="FirstName" HeaderText="First Name"/>
<asp:BoundField DataField="LastName" HeaderText="Last Name"/>
<asp:TemplateField HeaderText="Birth Date">
<ItemTemplate>
<asp:Label ID="BirthDateLabel" Runat="Server"
Text='<%# Eval("BirthDate", "{0:d}") %>' />
</ItemTemplate>
<InsertItemTemplate>
<asp:Calendar ID="InsertBirthDateCalendar" Runat="Server"
SelectedDate='<%# Bind("BirthDate") %>' />
</InsertItemTemplate>
<EditItemTemplate>
<asp:Calendar ID="EditBirthDateCalendar" Runat="Server"
VisibleDate='<%# Eval("BirthDate") %>'
SelectedDate='<%# Bind("BirthDate") %>' />
</EditItemTemplate>
</asp:TemplateField>
</Fields>
<Fields>
<asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/>
<asp:BoundField DataField="FirstName" HeaderText="First Name"/>
<asp:BoundField DataField="LastName" HeaderText="Last Name"/>
<asp:TemplateField HeaderText="Birth Date">
<ItemTemplate>
<asp:Label ID="BirthDateLabel" Runat="Server"
Text='<%# Eval("BirthDate", "{0:d}") %>' />
</ItemTemplate>
<InsertItemTemplate>
<asp:Calendar ID="InsertBirthDateCalendar" Runat="Server"
SelectedDate='<%# Bind("BirthDate") %>' />
</InsertItemTemplate>
<EditItemTemplate>
<asp:Calendar ID="EditBirthDateCalendar" Runat="Server"
VisibleDate='<%# Eval("BirthDate") %>'
SelectedDate='<%# Bind("BirthDate") %>' />
</EditItemTemplate>
</asp:TemplateField>
</Fields>
参照
概念
ASP.NET のデータ バインド Web サーバー コントロールの概要