Procedura: accedere ai membri del contenitore di denominazione di un controllo server Web
Aggiornamento: novembre 2007
È talvolta necessario accedere alle proprietà o ai metodi del contenitore di denominazione di un controllo. Durante un'associazione dati, ad esempio, il contenitore di denominazione rende disponibile una proprietà DataItem contenente i dati a cui i controlli vengono associati. È possibile accedere al controllo contenitore in più modi, a seconda del contesto.
Per accedere al contenitore di denominazione da una espressione di associazione dati
Nell'espressione di associazione dati utilizzare la parola chiave Container che restituisce un riferimento al contenitore. In tal modo, sarà possibile accedere alle proprietà e ai metodi del contenitore.
Nella maggior parte dei casi questa parola chiave viene utilizzata nel metodo Eval per ottenere i valori dall'oggetto DataItem del contenitore di denominazione, ma può essere utilizzata anche all'esterno di tale metodo. Nell'esempio riportato di seguito viene illustrato un controllo Label che potrebbe essere presente in un modello per un controllo DataList, Repeater o GridView. Visualizza il numero dell'elemento corrente seguito dall'elemento di dati Title corrente del contenitore di denominazione.
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
L'esempio riportato di seguito è simile al precedente, ma ottiene un valore (l'elemento Author) dall'oggetto DataItem del contenitore di denominazione:
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
Nota: La proprietà NamingContainer non fa necessariamente riferimento allo stesso controllo della proprietà Parent. In un controllo Repeater è, ad esempio, possibile avere un modello di elemento contenente una tabella che a sua volta contiene un controllo Label. Il controllo padre dell'etichetta è una cella della tabella (ad esempio un oggetto HtmlTableCell), ma il relativo contenitore di denominazione è l'oggetto DataListItem in quanto è il DataListItem che definisce lo spazio dei nomi del controllo Label, non la tabella.
Di seguito è riportato un esempio completo che utilizza la sintassi illustrata sopra per ottenere valori di proprietà.
<%@ 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>
Per accedere al contenitore di denominazione dal codice
Ottenere il valore contenuto nella proprietà NamingContainer del controllo ed eseguirne il cast nel tipo della classe del contenitore, ad esempio GridViewRow.
Per un esempio, vedere Utilizzo della proprietà NamingContainer per stabilire il contenitore di denominazione di un controllo.
Vedere anche
Concetti
Identificazione di controlli Web Form
Riferimenti
Sintassi delle espressioni di associazione dati