在 GridView Web 服务器控件中创建自定义列
更新:2007 年 11 月
GridView 控件可以自动从数据源提供的字段生成列。另外,可以创建要显示的列的集合,而不是自动生成它们。但是,您可能会遇到需要自定义单个列显示方式的情况。在这种情况下,可以创建一个 TemplateField 来指定自定义的列布局。
创建模板
使用 TemplateField 对象,可以指定包含标记和控件的模板,以便自定义 GridView 控件中列的布局和行为。使用 ItemTemplate,可以指定当 GridView 显示列中的数据时所使用的布局。若要在用户编辑列中的数据时指定自定义布局,可以创建一个 EditItemTemplate。
模板中可以包含标记、Web 服务器控件和命令按钮。有关模板的更多信息,请参见 ASP.NET Web 服务器控件模板。
模板中的数据绑定
在模板中,可以使用 Eval 和 Bind 方法将控件绑定到数据。当控件将仅显示值时,可以使用 Eval 方法。当用户可以修改数据值时,也就是在数据更新方案中,可以使用 Bind 方法。可以在任何模板中使用 Eval 方法来显示数据。如果模板包含值可能被用户更改的控件,如 TextBox 和 CheckBox 控件,或者模板允许删除记录,则可以使用 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>