Comment : accéder aux membres du conteneur de dénomination (naming container) d'un contrôle serveur Web
Mise à jour : novembre 2007
Vous devez parfois accéder aux propriétés ou méthodes du conteneur de dénomination d'un contrôle. Par exemple, au cours d'une liaison de données, le conteneur de dénomination met à votre disposition une propriété DataItem contenant les données auxquelles les contrôles sont liés. Vous disposez de plusieurs moyens pour accéder au contrôle conteneur en fonction du contexte.
Pour accéder au conteneur de dénomination à partir d'une expression de liaison de données
Dans l'expression de liaison de données, utilisez le mot clé Container, qui retourne une référence au conteneur. Vous pouvez ensuite accéder aux propriétés ou aux méthodes du conteneur.
La plupart du temps, ce mot clé est utilisé dans la méthode Eval pour obtenir des valeurs de l'objet DataItem du conteneur de dénomination, mais il peut également être utilisé en dehors de cette méthode. L'exemple suivant illustre un contrôle Label qui peut figurer dans un modèle d'un contrôle DataList, Repeater ou GridView. Il affiche le numéro de l'élément actuel suivi de l'élément de données Title actuel du conteneur de dénomination (naming container).
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
L'exemple suivant est similaire, mais obtient une valeur (élément Author) de l'objet DataItem du conteneur de dénomination :
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
Remarque : La propriété NamingContainer ne référence pas nécessairement le même contrôle que la propriété Parent. Par exemple, un contrôle Repeater peut contenir un modèle d'élément avec un tableau contenant à son tour un contrôle Label. Le contrôle parent de l'étiquette est une cellule de tableau (par exemple, un objet HtmlTableCell), mais son conteneur de dénomination est l'objet DataListItem, car c'est DataListItem, et non le tableau, qui définit l'espace de noms pour le contrôle Label.
Un exemple complet qui utilise la syntaxe indiquée ci-dessus pour obtenir des valeurs de propriété est illustré ci-dessous.
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Naming Container Example</title> </head> <body> <form id="form1" > <div> <asp:XmlDataSource ID="XmlDataSource1" XPath="Books/LanguageBooks/Book"> <Data> <Books> <LanguageBooks> <Book Title="Pure JavaScript" Author="Wyke, Gilliam, and Ting"/> <Book Title="Effective C++ Second Edition" Author="Scott Meyers"/> <Book Title="Assembly Language Step-By-Step" Author="Jeff Duntemann"/> <Book Title="Oracle PL/SQL" Author="Steven Feuerstein"/> </LanguageBooks> <SecurityBooks> <Book Title="Counter Hack" Author="Ed Skoudis"/> </SecurityBooks> </Books> </Data> </asp:XmlDataSource> <asp:GridView ID="GridView1" DataSourceID="XmlDataSource1" AutoGenerateColumns="False"> <Columns> <asp:TemplateField HeaderText="Title" > <ItemTemplate> <asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Author"> <ItemTemplate> <asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Naming Container Example</title> </head> <body> <form id="form1" > <div> <asp:XmlDataSource ID="XmlDataSource1" XPath="Books/LanguageBooks/Book"> <Data> <Books> <LanguageBooks> <Book Title="Pure JavaScript" Author="Wyke, Gilliam, and Ting"/> <Book Title="Effective C++ Second Edition" Author="Scott Meyers"/> <Book Title="Assembly Language Step-By-Step" Author="Jeff Duntemann"/> <Book Title="Oracle PL/SQL" Author="Steven Feuerstein"/> </LanguageBooks> <SecurityBooks> <Book Title="Counter Hack" Author="Ed Skoudis"/> </SecurityBooks> </Books> </Data> </asp:XmlDataSource> <asp:GridView ID="GridView1" DataSourceID="XmlDataSource1" AutoGenerateColumns="False"> <Columns> <asp:TemplateField HeaderText="Title" > <ItemTemplate> <asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Author"> <ItemTemplate> <asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
Pour accéder au conteneur de dénomination à partir du code
Obtenez la propriété NamingContainer du contrôle et effectuez un cast de celle-ci en type de classe du conteneur, tel que GridViewRow.
Pour obtenir un exemple, consultez Utilisation de la propriété NamingContainer pour déterminer le conteneur de dénomination (naming container) d'un contrôle.
Voir aussi
Concepts
Identification d'un contrôle Web Forms
Référence
Syntaxe d'expression de liaison de données