在 DetailsView Web 服务器控件中创建自定义行

更新:2007 年 11 月

DetailsView 控件可以自动基于数据源提供的字段生成行。另外,您还可以明确标识要显示的行集合,而不是自动生成它们。但是,您可能会遇到需要自定义如何显示单个行的情况。在这种情况下,可以创建一个 TemplateField 来指定自定义布局。

创建模板

使用 TemplateField 对象,您可以指定包含标记和控件的模板,以自定义 DetailsView 控件中的行的布局和行为。使用 ItemTemplate,您可以指定在 DetailsView 控件显示行时使用的布局。若要指定用户插入新数据行时的自定义布局,可以创建一个 InsertItemTemplate。若要指定用户编辑新数据行时的自定义布局,可以创建一个 EditItemTemplate

模板可以包含标记、Web 服务器控件和命令按钮。有关模板的更多信息,请参见 ASP.NET Web 服务器控件模板

模板中的数据绑定

在模板中,可以使用 Eval 和 Bind 方法将控件绑定到数据。当控件仅显示值时,您可以使用 Eval 方法。当用户可以修改数据值时,也就是在数据更新方案中,可以使用 Bind 方法。在任何模板中都可以使用 Eval 方法来显示数据。如果模板包含值可能被用户更改的控件,如 TextBoxCheckBox 控件,或者模板允许删除记录,则可以使用 Bind 方法。有关更多信息,请参见数据绑定表达式概述

示例

下面的示例演示 DetailsView 控件的 Fields 集合。该集合中包含了 TemplateField 对象,该对象中又包含了 ItemTemplateInsertItemTemplateEditItemTemplate 对象。若要显示日期,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 服务器控件概述

数据源控件概述

参考

DetailsView Web 服务器控件概述