Page.FindControl(String) Page.FindControl(String) Page.FindControl(String) Page.FindControl(String) Method

定義

指定した識別子を使用して、サーバー コントロールについてページの名前付けコンテナーを検索します。Searches the page naming container for a server control with the specified identifier.

public:
 override System::Web::UI::Control ^ FindControl(System::String ^ id);
public override System.Web.UI.Control FindControl (string id);
override this.FindControl : string -> System.Web.UI.Control
Public Overrides Function FindControl (id As String) As Control

パラメーター

id
String String String String

検索されるコントロールの識別子。The identifier for the control to be found.

戻り値

指定したコントロール。指定したコントロールがない場合は nullThe specified control, or null if the specified control does not exist.

次のコード例は、メソッドを使用FindControlして、テンプレート内のコントロールを検索する方法を示しています。The following code example demonstrates how to use the FindControl method to locate controls inside templates. この例では、 Repeater 2 つのコントロールが定義されています。 Click各コントロールはLinkButton 、repeater 項目テンプレート内ののイベントをキャッチする別の方法を示しています。In this example, two Repeater controls are defined; each shows a different way to catch the Click event of a LinkButton inside the repeater item template.

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

  private class RepeaterObject
  {
    private string _string;

    public RepeaterObject(string label)
    {
      _string = label;
    }

    public string RepeaterLabel
    {
      get { return _string; }
      set { _string = value; }
    }
  }

  protected void Page_Load()
  {
    if (!IsPostBack)
    {
      ArrayList al = new ArrayList();

      al.Add(new RepeaterObject("RepeaterObject1"));
      al.Add(new RepeaterObject("RepeaterObject2"));
      al.Add(new RepeaterObject("RepeaterObject3"));
      Repeater1.DataSource = al;
      Repeater2.DataSource = al;
      DataBind();
    }
  }


  // This occurs for Repeater1 and originates from LinkButton onClick.
  protected void OnMyCommand1(object sender, CommandEventArgs e)
  {
    LinkButton b = sender as LinkButton;
    if (b != null)
    {
      Label c = (Label)b.Parent.FindControl("Label1");
      if (c != null)
      {
        c.Text = "text changed in handler";
        c.ForeColor = System.Drawing.Color.Green;
      }
    }
  }

  // This occurs for Repeater2 and comes from the Repeater onItemCommand.
  protected void OnMyCommand2(object sender, RepeaterCommandEventArgs e)
  {
    Label l = (Label)e.Item.FindControl("Label1");
    if (l != null)
    {
      l.Text = "text changed in handler";
      l.ForeColor = System.Drawing.Color.Red;
    }
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Page FindControl Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <asp:Panel ID="Panel1" runat="server" >
        This repeater sample shows the bubbled event and FindControl when the repeater item OnCommand event occurs.<br />
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <asp:Label runat="server" ID="Label1" Text='<%#Eval("RepeaterLabel")%>' />&nbsp;
                <asp:LinkButton Text="Change" runat="server" OnCommand="OnMyCommand1" /> <br />
            </ItemTemplate>
        </asp:Repeater>
        <hr />

        This repeater shows the bubbled event and FindControl when the repeater OnItemCommand event occurs. <br />
        <asp:Repeater ID="Repeater2" runat="server" OnItemCommand="OnMyCommand2">
            <ItemTemplate>
                <asp:Label runat="server" ID="Label1" Text='<%#Eval("RepeaterLabel")%>' />&nbsp;
                <asp:LinkButton Text="Change" runat="server" /> <br />
            </ItemTemplate>
        </asp:Repeater>
    </asp:Panel>

    </div>
    </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">

  Private Class RepeaterObject
    
    Private _string As String
    
    Public Sub New(ByVal label As String)
      _string = label
    End Sub
    
    Public Property RepeaterLabel() As String
      Get
        Return _string
      End Get
      Set(ByVal value As String)
        _string = value
      End Set
    End Property
  
  End Class
    
    
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

    If (Not IsPostBack) Then
    
      Dim al As New ArrayList()
      al.Add(New RepeaterObject("RepeaterObject1"))
      al.Add(New RepeaterObject("RepeaterObject2"))
      al.Add(New RepeaterObject("RepeaterObject3"))
      Repeater1.DataSource = al
      Repeater2.DataSource = al
      DataBind()
    End If
    
  End Sub


  ' This occurs for Repeater1 and originates from LinkButton onClick.
  Protected Sub OnMyCommand1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
    Dim b As LinkButton = sender
    If Not (b Is Nothing) Then
      Dim c As Label = CType(b.Parent.FindControl("Label1"), Label)
      If Not (c Is Nothing) Then
        c.Text = "text changed in handler"
        c.ForeColor = System.Drawing.Color.Green
      End If
    End If
    
  End Sub
  
  ' This occurs for Repeater2 and comes from the Repeater onItemCommand.
  Protected Sub OnMyCommand2(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs)
    Dim l As Label = CType(e.Item.FindControl("Label1"), Label)
    If Not (l Is Nothing) Then
      l.Text = "text changed in handler"
      l.ForeColor = System.Drawing.Color.Red
    End If
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Page FindControl Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <asp:Panel ID="Panel1" runat="server" >
        This repeater sample shows the bubbled event and FindControl when the repeater item OnCommand event occurs.<br />
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <asp:Label runat="server" ID="Label1" Text='<%#Eval("RepeaterLabel")%>' />&nbsp;
                <asp:LinkButton ID="LinkButton1" Text="Change" runat="server" OnCommand="OnMyCommand1" /> <br />
            </ItemTemplate>
        </asp:Repeater>
        <hr />

        This repeater shows the bubbled event and FindControl when the repeater OnItemCommand event occurs. <br />
        <asp:Repeater ID="Repeater2" runat="server" OnItemCommand="OnMyCommand2">
            <ItemTemplate>
                <asp:Label runat="server" ID="Label1" Text='<%#Eval("RepeaterLabel")%>' />&nbsp;
                <asp:LinkButton ID="LinkButton2" Text="Change" runat="server" /> <br />
            </ItemTemplate>
        </asp:Repeater>
    </asp:Panel>

    </div>
    </form>
</body>
</html>

注釈

メソッドを使用すると、デザイン時にIDを使用できないコントロールにアクセスできます。 FindControlThe FindControl method can be used to access a control whose ID is not available at design time. メソッドは、ページの直接または最上位のコンテナーのみを検索します。ページに含まれているコンテナーの名前付けでは、コントロールは再帰的に検索されません。The method searches only the page's immediate, or top-level, container; it does not recursively search for controls in naming containers contained on the page. 下位の名前付けコンテナー内のコントロールにアクセスするFindControlには、そのコンテナーのメソッドを呼び出します。To access controls in a subordinate naming container, call the FindControl method of that container.

適用対象

こちらもご覧ください