Comment fonctionne la méthode FindControl lors de la recherche d'un contrôle à l'intérieur d'un champ de modèle GridView (plus précisément, un ItemTemplate) ?
Dans le contexte d'ASP. NET, la méthode FindControl permet aux développeurs de rechercher un contrôle spécifique au sein d'une hiérarchie de contrôles. Lorsqu'il est utilisé avec un ItemTemplate d'un GridView TemplateField, il permet d'accéder aux contrôles définis dans le modèle.
Mise à jour de la question avec le code :
Le code fourni présente un GridView avec plusieurs imbriqués. 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>
Problème :
Le code vise à accéder et à manipuler le contrôle HyperLink ("hlPlus") défini au sein du ItemTemplate du TemplateField "H" . Cependant, l'utilisation de la méthode FindControl ne donne pas les résultats attendus.
Réponse :
Pour accéder avec succès à un contrôle dans le ItemTemplate d'un TemplateField, vous pouvez utiliser la méthode FindControlRecursive, qui recherche de manière récursive dans la hiérarchie des contrôles l'ID de contrôle spécifié. Voici un exemple :
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... } } }
La méthode FindControlRecursive garantit une recherche approfondie même dans les hiérarchies de modèles imbriquées, localisant efficacement le contrôle souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!