GridView TemplateField (具体的には、ItemTemplate) 内のコントロールを検索するときの FindControl メソッドの動作?
ASP のコンテキスト。 NET では、FindControl メソッドを使用すると、開発者はコントロール階層内の特定のコントロールを検索できます。 GridView TemplateField の ItemsTemplate とともに使用すると、テンプレート内で定義されたコントロールにアクセスできるようになります。
コードによる質問の更新:
提供されたコードは、複数のネストされた GridView を示しています。 TemplateFields:
<asp:GridView ID="grvYourOpportunities"...> <Columns> <asp:TemplateField HeaderText="H"> <ItemTemplate> <asp:HyperLink runat="server" ID="hlPlus" ImageUrl="~/plus.gif"></asp:HyperLink> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
問題:
このコードは、「H」TemplateField の ItemsTemplate 内で定義された HyperLink コントロール (「hlPlus」) にアクセスして操作することを目的としています。 。ただし、FindControl メソッドを使用しても期待した結果が得られません。
回答:
TemplateField の ItemsTemplate 内のコントロールに正常にアクセスするには、FindControlRecursive メソッドを利用できます。これは、指定されたコントロール ID のコントロール階層を再帰的に検索します。以下に例を示します。
protected void grvYourOpt_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { HyperLink hlPlus = e.Row.FindControlRecursive("hlPlus") as HyperLink; if (hlPlus != null) { // Your code to manipulate the HyperLink control here... } } }
FindControlRecursive メソッドは、ネストされたテンプレート階層内であっても徹底的な検索を保証し、目的のコントロールを効率的に見つけます。
以上がFindControl を効果的に使用して GridView の ItemsTemplate 内のコントロールにアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。