在 DetailsView Web 服务器控件中创建自定义行
更新: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>