TemplateField Konstruktor
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Inicializuje novou instanci TemplateField třídy.
public:
TemplateField();
public TemplateField ();
Public Sub New ()
Příklady
Následující příklad kódu ukazuje, jak pomocí konstruktoru dynamicky přidat TemplateField sloupec pole do GridView ovládacího prvku.
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// Create a template class to represent a dynamic template column.
public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;
public GridViewTemplate(DataControlRowType type, string colname)
{
templateType = type;
columnName = colname;
}
public void InstantiateIn(System.Web.UI.Control container)
{
// Create the content for the different row types.
switch(templateType)
{
case DataControlRowType.Header:
// Create the controls to put in the header
// section and set their properties.
Literal lc = new Literal();
lc.Text = "<b>" + columnName + "</b>";
// Add the controls to the Controls collection
// of the container.
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
// Create the controls to put in a data row
// section and set their properties.
Label firstName = new Label();
Label lastName = new Label();
Literal spacer = new Literal();
spacer.Text = " ";
// To support data binding, register the event-handling methods
// to perform the data binding. Each control needs its own event
// handler.
firstName.DataBinding += new EventHandler(this.FirstName_DataBinding);
lastName.DataBinding += new EventHandler(this.LastName_DataBinding);
// Add the controls to the Controls collection
// of the container.
container.Controls.Add(firstName);
container.Controls.Add (spacer);
container.Controls.Add(lastName);
break;
// Insert cases to create the content for the other
// row types, if desired.
default:
// Insert code to handle unexpected values.
break;
}
}
private void FirstName_DataBinding(Object sender, EventArgs e)
{
// Get the Label control to bind the value. The Label control
// is contained in the object that raised the DataBinding
// event (the sender parameter).
Label l = (Label)sender;
// Get the GridViewRow object that contains the Label control.
GridViewRow row = (GridViewRow)l.NamingContainer;
// Get the field value from the GridViewRow object and
// assign it to the Text property of the Label control.
l.Text = DataBinder.Eval(row.DataItem, "au_fname").ToString();
}
private void LastName_DataBinding(Object sender, EventArgs e)
{
// Get the Label control to bind the value. The Label control
// is contained in the object that raised the DataBinding
// event (the sender parameter).
Label l = (Label)sender;
// Get the GridViewRow object that contains the Label control.
GridViewRow row = (GridViewRow)l.NamingContainer;
// Get the field value from the GridViewRow object and
// assign it to the Text property of the Label control.
l.Text = DataBinder.Eval(row.DataItem, "au_lname").ToString();
}
}
void Page_Load(Object sender, EventArgs e)
{
// The field columns need to be created only when the page is
// first loaded.
if (!IsPostBack)
{
// Dynamically create field columns to display the desired
// fields from the data source. Create a TemplateField object
// to display an author's first and last name.
TemplateField customField = new TemplateField();
// Create the dynamic templates and assign them to
// the appropriate template property.
customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "Author Name");
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "Author Name");
// Add the field column to the Columns collection of the
// GridView control.
AuthorsGridView.Columns.Add(customField);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>TemplateField Constructor Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>TemplateField Constructor Example</h3>
<asp:gridview id="AuthorsGridView"
datasourceid="AuthorsSqlDataSource"
autogeneratecolumns="False"
runat="server">
</asp:gridview>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Pubs sample database. -->
<asp:sqldatasource id="AuthorsSqlDataSource"
selectcommand="SELECT [au_fname], [au_lname] FROM [authors]"
connectionstring="server=localhost;database=pubs;integrated security=SSPI"
runat="server">
</asp:sqldatasource>
</form>
</body>
</html>
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' Create a template class to represent a dynamic template column.
Public Class GridViewTemplate
Implements ITemplate
Private templateType As DataControlRowType
Private columnName As String
Sub New(ByVal type As DataControlRowType, ByVal colname As String)
templateType = type
columnName = colname
End Sub
Sub InstantiateIn(ByVal container As System.Web.UI.Control) _
Implements ITemplate.InstantiateIn
' Create the content for the different row types.
Select Case templateType
Case DataControlRowType.Header
' Create the controls to put in the header
' section and set their properties.
Dim lc As New Literal
lc.Text = "<b>" & columnName & "</b>"
' Add the controls to the Controls collection
' of the container.
container.Controls.Add(lc)
Case DataControlRowType.DataRow
' Create the controls to put in a data row
' section and set their properties.
Dim firstName As New Label
Dim lastName As New Label
Dim spacer = New Literal
spacer.Text = " "
' To support data binding, register the event-handling methods
' to perform the data binding. Each control needs its own event
' handler.
AddHandler firstName.DataBinding, AddressOf FirstName_DataBinding
AddHandler lastName.DataBinding, AddressOf LastName_DataBinding
' Add the controls to the Controls collection
' of the container.
container.Controls.Add(firstName)
container.Controls.Add(spacer)
container.Controls.Add(lastName)
' Insert cases to create the content for the other
' row types, if desired.
Case Else
' Insert code to handle unexpected values.
End Select
End Sub
Private Sub FirstName_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
' Get the Label control to bind the value. The Label control
' is contained in the object that raised the DataBinding
' event (the sender parameter).
Dim l As Label = CType(sender, Label)
' Get the GridViewRow object that contains the Label control.
Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)
' Get the field value from the GridViewRow object and
' assign it to the Text property of the Label control.
l.Text = DataBinder.Eval(row.DataItem, "au_fname").ToString()
End Sub
Private Sub LastName_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
' Get the Label control to bind the value. The Label control
' is contained in the object that raised the DataBinding
' event (the sender parameter).
Dim l As Label = CType(sender, Label)
' Get the GridViewRow object that contains the Label control.
Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)
' Get the field value from the GridViewRow object and
' assign it to the Text property of the Label control.
l.Text = DataBinder.Eval(row.DataItem, "au_lname").ToString()
End Sub
End Class
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
' The field columns need to be created only when the page is
' first loaded.
If Not IsPostBack Then
' Dynamically create field columns to display the desired
' fields from the data source. Create a TemplateField object
' to display an author's first and last name.
Dim customField As New TemplateField
' Create the dynamic templates and assign them to
' the appropriate template property.
customField.ItemTemplate = New GridViewTemplate(DataControlRowType.DataRow, "Author Name")
customField.HeaderTemplate = New GridViewTemplate(DataControlRowType.Header, "Author Name")
' Add the field column to the Columns collection of the
' GridView control.
AuthorsGridView.Columns.Add(customField)
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>TemplateField Constructor Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>TemplateField Constructor Example</h3>
<asp:gridview id="AuthorsGridView"
datasourceid="AuthorsSqlDataSource"
autogeneratecolumns="False"
runat="server">
</asp:gridview>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Pubs sample database. -->
<asp:sqldatasource id="AuthorsSqlDataSource"
selectcommand="SELECT [au_fname], [au_lname] FROM [authors]"
connectionstring="server=localhost;database=pubs;integrated security=SSPI"
runat="server">
</asp:sqldatasource>
</form>
</body>
</html>
Poznámky
Tento konstruktor použijte k inicializaci nové instance TemplateField třídy. Tento konstruktor se běžně používá při přidávání polí do dynamicky vytvořeného ovládacího prvku vázaného na data.
Pokud chcete dynamicky přidat TemplateField objekt do ovládacího prvku vázaného na data, vytvořte nový TemplateField objekt, definujte příslušné šablony a přidejte ho do kolekce polí ovládacího prvku vázaného na data. Pokud například používáte GridView ovládací prvek, přidejte TemplateField objekt do Columns kolekce.
Poznámka
I když můžete dynamicky přidávat pole do ovládacího prvku vázaného na data, důrazně doporučujeme, aby byla pole staticky deklarována a poté zobrazena nebo skrytá podle potřeby. Statické deklarování všech polí snižuje velikost stavu zobrazení nadřazeného ovládacího prvku vázaného na data.