次の方法で共有


TemplateField コンストラクター

定義

TemplateField クラスの新しいインスタンスを初期化します。

public:
 TemplateField();
public TemplateField ();
Public Sub New ()

次のコード例では、コンストラクターを使用してフィールド列をコントロールに動的に追加 TemplateField する方法を GridView 示します。


<%@ 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>

注釈

クラスの新しいインスタンスを初期化するには、このコンストラクターを TemplateField 使用します。 このコンストラクターは、動的に作成されたデータ バインド コントロールにフィールドを追加するときによく使用されます。

データ バインド コントロールにオブジェクトを TemplateField 動的に追加するには、新しい TemplateField オブジェクトを作成し、適切なテンプレートを定義してから、データ バインド コントロールのフィールド コレクションに追加します。 たとえば、 コントロールを使用 GridView している場合は、 オブジェクトを TemplateField コレクションに Columns 追加します。

注意

データ バインド コントロールにフィールドを動的に追加できますが、必要に応じてフィールドを静的に宣言してから表示または非表示にすることを強くお勧めします。 すべてのフィールドを静的に宣言すると、親データ バインド コントロールのビュー ステートのサイズが小さくなります。

適用対象

こちらもご覧ください