Comment accéder aux contrôles dans le modèle de mise en page de ListView ?
Question
Comment définir une propriété d'un contrôle utilisateur dans ListView
c'est LayoutTemplate
du code-behind ?
<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>
Je veux faire ça:
myControl.SomeProperty = somevalue;
Veuillez noter que mon contrôle n'est pas activé ItemTemplate
, c'est dedans LayoutTemplate
, il n'existe donc pas pour tous les éléments, il n'existe qu'une seule fois.Je devrais donc pouvoir y accéder une fois, pas pour chaque élément lié aux données.
La solution
Pour définir une propriété d'un contrôle qui se trouve à l'intérieur du LayoutTemplate, utilisez simplement la méthode FindControl sur le contrôle ListView.
var control = (MyControl)myListView.FindControl("myControlId");
Autres conseils
var control = (MyControl)myListView.FindControl("myControlId");
Cela fonctionnera, mais assurez-vous de le faire après la liaison des données, sinon le LayoutTemplate n'aura pas été créé, générant ainsi une erreur.
Utilisez le RechercherContrôle méthode sur chaque ListViewItem.
var control = (MyControl)Item.FindControl("yourControlId");
Cela a été répondu dans cette question Stack Overflow :
Accéder à un contrôle à l'intérieur du LayoutTemplate d'un ListView
Voir le commentaire sur la réponse acceptée par Tanathos.
Je sais que cela a été demandé il y a plus d'un an, mais c'est l'un des premiers résultats pour le terme de recherche que j'obtenais ici, donc je voulais laisser la réponse à toute autre personne qui serait tombée dessus.
La mise en page est créée et déclenche un événement LayoutCreated qui indique que la mise en page a été créée dans le système.
Ensuite, vous pouvez utiliser listview.FindControl pour obtenir une référence à ce contrôle.
Si vous avez besoin de la version VB.net, la voici :
Dim control = CType(myListView.FindControl("myControlId"), MyControl)