TemplateColumn Class
Represents a column type for the DataGrid control that allows you to customize the layout of controls in the column.
For a list of all members of this type, see TemplateColumn Members.
System.Object
System.Web.UI.WebControls.DataGridColumn
System.Web.UI.WebControls.TemplateColumn
[Visual Basic] Public Class TemplateColumn Inherits DataGridColumn [C#] public class TemplateColumn : DataGridColumn [C++] public __gc class TemplateColumn : public DataGridColumn [JScript] public class TemplateColumn extends DataGridColumn
Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Remarks
Use the TemplateColumn column type in a DataGrid control to create a column with a customized control layout. You can provide a custom appearance for the heading section, the footer section, and items section of the column by using the HeaderTemplate, FooterTemplate, and ItemTemplate properties, respectively. You can also control how an item being edited is displayed in the TemplateColumn by setting the EditItemTemplate property.
Example
[Visual Basic, C#] The following example demonstrates how to use the TemplateColumn to create a column in the DataGrid control with a custom layout.
[Visual Basic] <%@ Page Language="VB" AutoEventWireup="True" %> <%@ Import Namespace="System.Data" %> <html> <script runat="server"> Private Store As DataTable = New DataTable() Private StoreView As DataView Sub Page_Load(sender As Object, e As EventArgs) If IsNothing(Session("StoreData")) Then Dim dr As DataRow Dim i As Integer Store = New DataTable() Store.Columns.Add(New DataColumn("Tax", GetType(String))) Store.Columns.Add(New DataColumn("Item", GetType(String))) Store.Columns.Add(New DataColumn("Price", GetType(String))) Session("StoreData") = Store ' Create sample data. For i = 1 to 4 dr = Store.NewRow() dr(0) = "0.0%" dr(1) = "Item " & i.ToString() dr(2) = (1.23 * (i + 1)).ToString() Store.Rows.Add(dr) Next i Else Store = Session("StoreData") End If StoreView = New DataView(Store) StoreView.Sort="Item" If Not IsPostBack Then BindGrid() End If End Sub Sub MyDataGrid_Edit(sender As Object, e As DataGridCommandEventArgs) MyDataGrid.EditItemIndex = e.Item.ItemIndex BindGrid() End Sub Sub MyDataGrid_Cancel(sender As Object, e As DataGridCommandEventArgs) MyDataGrid.EditItemIndex = -1 BindGrid() End Sub Sub MyDataGrid_Update(sender As Object, e As DataGridCommandEventArgs) ' Get the text box that contains the price to edit. ' For bound columns the edited value is stored in a text box. ' The text box is the first control in the Controls collection. Dim priceText As TextBox = e.Item.Cells(3).Controls(0) ' Get the check box that indicates whether to include tax from the ' TemplateColumn. Notice that in this case, the check box control is ' second control in the Controls collection. Dim taxCheck As CheckBox = e.Item.Cells(2).Controls(1) Dim item As String = e.Item.Cells(1).Text Dim price As String = priceText.Text Dim dr As DataRow ' With a database, use an update command. Since the data source is ' an in-memory DataTable, delete the old row and replace it with a new one. ' Remove old entry. StoreView.RowFilter = "Item='" & item & "'" If StoreView.Count > 0 Then StoreView.Delete(0) End If StoreView.RowFilter = "" ' Add new entry. dr = Store.NewRow() If taxCheck.Checked Then dr(0) = "8.6%" Else dr(0) = "0.0%" End If dr(1) = item dr(2) = price Store.Rows.Add(dr) MyDataGrid.EditItemIndex = -1 BindGrid() End Sub Sub BindGrid() MyDataGrid.DataSource = StoreView MyDataGrid.DataBind() End Sub </script> <body> <form runat="server"> <h3>TemplateColumn Example</h3> <asp:DataGrid id="MyDataGrid" runat="server" BorderColor="black" CellPadding="2" OnEditCommand="MyDataGrid_Edit" OnCancelCommand="MyDataGrid_Cancel" OnUpdateCommand="MyDataGrid_Update" ShowFooter="True" AutoGenerateColumns="false"> <Columns> <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false" HeaderText="Edit Controls"/> <asp:BoundColumn HeaderText="Description" ReadOnly="true" DataField="Item"/> <asp:TemplateColumn> <HeaderTemplate> <b> Tax </b> </HeaderTemplate> <ItemTemplate> <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>' runat="server"/> </ItemTemplate> <EditItemTemplate> <asp:CheckBox Text="Taxable" runat="server"/> </EditItemTemplate> <FooterTemplate> <asp:HyperLink id="HyperLink1" Text="Microsoft" NavigateUrl="http://www.microsoft.com" runat="server"/> </FooterTemplate> </asp:TemplateColumn> <asp:BoundColumn HeaderText="Price" DataField="Price"/> </Columns> </asp:DataGrid> </form> </body> </html> [C#] <%@ Page Language="C#" AutoEventWireup="True" %> <%@ Import Namespace="System.Data" %> <html> <script runat="server"> DataTable Store = new DataTable(); DataView StoreView; void Page_Load(Object sender, EventArgs e) { if(Session["StoreData"] == null) { DataRow dr; Store = new DataTable(); Store.Columns.Add(new DataColumn("Tax", typeof(String))); Store.Columns.Add(new DataColumn("Item", typeof(String))); Store.Columns.Add(new DataColumn("Price", typeof(String))); Session["StoreData"] = Store; // Create sample data. for (int i = 1; i <= 4; i++) { dr = Store.NewRow(); dr[0] = "0.0%"; dr[1] = "Item " + i.ToString(); dr[2] = (1.23 * (i + 1)).ToString(); Store.Rows.Add(dr); } } else Store = (DataTable)Session["StoreData"]; StoreView = new DataView(Store); StoreView.Sort="Item"; if(!IsPostBack) BindGrid(); } void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e) { MyDataGrid.EditItemIndex = e.Item.ItemIndex; BindGrid(); } void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e) { MyDataGrid.EditItemIndex = -1; BindGrid(); } void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e) { // Get the text box that contains the price to edit. // For bound columns the edited value is stored in a text box. // The text box is the first control in the Controls collection. TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0]; // Get the check box that indicates whether to include tax from the // TemplateColumn. Notice that in this case, the check box control is // second control in the Controls collection. CheckBox taxCheck = (CheckBox)e.Item.Cells[2].Controls[1]; String item = e.Item.Cells[1].Text; String price = priceText.Text; DataRow dr; // With a database, use an update command. Since the data source is // an in-memory DataTable, delete the old row and replace it with a new one. // Remove old entry. StoreView.RowFilter = "Item='" + item + "'"; if (StoreView.Count > 0) StoreView.Delete(0); StoreView.RowFilter = ""; // Add new entry. dr = Store.NewRow(); if (taxCheck.Checked) dr[0] = "8.6%"; else dr[0] = "0.0%"; dr[1] = item; dr[2] = price; Store.Rows.Add(dr); MyDataGrid.EditItemIndex = -1; BindGrid(); } void BindGrid() { MyDataGrid.DataSource = StoreView; MyDataGrid.DataBind(); } </script> <body> <form runat="server"> <h3>TemplateColumn Example</h3> <asp:DataGrid id="MyDataGrid" runat="server" BorderColor="black" CellPadding="2" OnEditCommand="MyDataGrid_Edit" OnCancelCommand="MyDataGrid_Cancel" OnUpdateCommand="MyDataGrid_Update" ShowFooter="True" AutoGenerateColumns="false"> <Columns> <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false" HeaderText="Edit Controls"/> <asp:BoundColumn HeaderText="Description" ReadOnly="true" DataField="Item"/> <asp:TemplateColumn> <HeaderTemplate> <b> Tax </b> </HeaderTemplate> <ItemTemplate> <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>' runat="server"/> </ItemTemplate> <EditItemTemplate> <asp:CheckBox Text="Taxable" runat="server"/> </EditItemTemplate> <FooterTemplate> <asp:HyperLink id="HyperLink1" Text="Microsoft" NavigateUrl="http://www.microsoft.com" runat="server"/> </FooterTemplate> </asp:TemplateColumn> <asp:BoundColumn HeaderText="Price" DataField="Price"/> </Columns> </asp:DataGrid> </form> </body> </html>
[C++, JScript] No example is available for C++ or JScript. To view a Visual Basic or C# example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Namespace: System.Web.UI.WebControls
Platforms: Windows 2000, Windows XP Professional, Windows Server 2003 family
Assembly: System.Web (in System.Web.dll)
See Also
TemplateColumn Members | System.Web.UI.WebControls Namespace | DataGrid | DataGridColumn | BoundColumn | ButtonColumn | EditCommandColumn | HyperLinkColumn | HeaderTemplate | FooterTemplate | ItemTemplate | EditItemTemplate