Partager via


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

Voir aussi

Concepts

Identification d'un contrôle Web Forms

Référence

Syntaxe d'expression de liaison de données

Autres ressources

Accès par programme aux contrôles ASP.NET