建立 GridView Web 伺服器控制項中的自訂資料行
更新:2007 年 11 月
GridView 控制項能夠從資料來源提供的欄位自動產生資料行。此外,您也可以建立要顯示的資料行集合,而不是自動產生資料行。但是,您可能會遇到需要自訂如何顯示個別資料行的情況。在這種情況下,您可以建立 TemplateField 指定自訂資料行配置。
建立樣板
TemplateField 物件能夠讓您指定包含標記和控制項的樣板,以自訂 GridView 控制項中資料行配置與行為。當 GridView 控制項顯示資料行中的資料時,您可以使用 ItemTemplate 指定要使用的配置。當使用者編輯資料行中的資料時,若要指定自訂配置,您可以建立 EditItemTemplate。
您的樣板可以包含標記、Web 伺服器控制項和命令按鈕。如需範本的詳細資訊,請參閱 ASP.NET Web 伺服器控制項樣板。
樣板中的資料繫結
在樣板中,您可以使用 Eval 和 Bind 方法將控制項繫結至資料。當控制項只會顯示值時,可以使用 Eval 方法。當使用者能夠修改資料值 (也就是資料更新案例) 時,您可以使用 Bind 方法。您可以使用任何樣板中的 Eval 方法顯示資料。您可以在使用者會變更控制項值 (例如 TextBox 和 CheckBox 控制項) 的樣板,或是允許刪除記錄的樣板中使用 Bind 方法。如需詳細資訊,請參閱資料繫結運算式概觀。
範例
下列程式碼範例示範 GridView 控制項的 Columns 集合。集合中包含 TemplateField 物件,而物件中又包含 ItemTemplate 物件。若要顯示日期,ItemTemplate 會包含使用 Eval 方法的 Label 控制項。若要編輯日期,其他樣板會使用 Calendar 控制項,而這個控制項會使用 Bind 方法。
<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>