Como: Membros de acesso de um controle de servidor Web do contêiner de nomenclatura
Às vezes, você precisará acessar propriedades ou métodos do recipiente de nomeação de um controle.Por exemplo, durante a vinculação de dados, o recipiente de nomeação torna disponível uma propriedade DataItem que contém os dados aos quais controles são vinculados.Você pode acessar o recipiente de maneiras diferentes, dependendo do contexto.
Para acessar o recipiente de nomeação de uma expressão de vinculação de dados
Na expressão de vinculação de dados, use a palavra-chave Container, que retorna uma referência para o recipiente.Você pode acessar as propriedades ou métodos do recipiente.
Esta palavra-chave é usada com mais frequência no método Eval para obter os valores a partir do objeto DataItem do contêiner de nomeação, mas pode ser usado fora do método também.O exemplo a seguir mostra um controle Label que pode estar em um modelo para um controle DataList, Repeater ou GridView.Ele exibe o número de item atual seguido pelo atual item de dados Title do contêiner de nomeação.
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
O exemplo a seguir é semelhante, mas obtém um valor (o item Author) do objeto DataItem do recipiente de nomeação:
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
Observação: A propriedade NamingContainer não necessariamente faz referência ao mesmo controle que a propriedade Parent.Por exemplo, em um controle Repeater, você pode ter um modelo de item contendo uma tabela que por sua vez contém um controle Label.O controle pai do rótulo é uma célula de tabela (por exemplo, um objeto HtmlTableCell), mas o contêiner de nomeação é o objeto DataListItem, porque ele é o DataListItem que define o namespace para o controle Label, não a tabela.
Um exemplo completo usando a sintaxe mostrada acima para obter valores de propriedade é mostrado abaixo.
<%@ 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>
Para acessar o recipiente de nomeação a partir do código
Obtenha a propriedade NamingContainer do controle e converta-a para o tipo de classe do recipiente, como GridViewRow.
Para um exemplo, consulte Usando a propriedade NamingContainer para determinar um contêiner de nomeação do controle.
Consulte também
Conceitos
Identificação de Controles de Web Forms
Referência
Sintaxe de expressões de ligação de dados