在 GridView Web 服务器控件中创建自定义列

更新:2007 年 11 月

GridView 控件可以自动从数据源提供的字段生成列。另外,可以创建要显示的列的集合,而不是自动生成它们。但是,您可能会遇到需要自定义单个列显示方式的情况。在这种情况下,可以创建一个 TemplateField 来指定自定义的列布局。

创建模板

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

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

模板中的数据绑定

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

示例

下面的示例演示 GridView 控件的 Columns 集合。该集合中包含 TemplateField 对象,该对象中又包含 ItemTemplate 对象。若要显示日期,可在 ItemTemplate 中包括一个使用 Eval 方法的 Label 控件。若要编辑日期,可在其他模板中包括一个使用 Bind 方法的 Calendar 控件。

<Columns>                  
  <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" 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>
    <EditItemTemplate>
      <asp:Calendar ID="EditBirthDateCalendar" Runat="Server"
                    VisibleDate='<%# Eval("BirthDate") %>'
                    SelectedDate='<%# Bind("BirthDate") %>' />
    </EditItemTemplate>
  </asp:TemplateField>   
  <asp:HyperLinkField Text="Show Detail"
                      DatahrefFormatString="~/ShowEmployeeDetail.aspx?EmployeeID={0}"
                      DatahrefFields="EmployeeID" />                   
</Columns> 
<Columns>                  
  <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" 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>
    <EditItemTemplate>
      <asp:Calendar ID="EditBirthDateCalendar" Runat="Server"
                    VisibleDate='<%# Eval("BirthDate") %>'
                    SelectedDate='<%# Bind("BirthDate") %>' />
    </EditItemTemplate>
  </asp:TemplateField> 
  <asp:HyperLinkField Text="Show Detail"
                      DatahrefFormatString="~/ShowEmployeeDetail.aspx?EmployeeID={0}"
                      DatahrefFields="EmployeeID" />                   
</Columns> 

请参见

概念

ASP.NET 数据绑定 Web 服务器控件概述

数据源控件概述

参考

GridView Web 服务器控件概述