Partilhar via


Visão geral de expressões de ligação de dados

Sintaxe de ligação de dados permite que você vincule valores de propriedade de controle a dados e especifique valores para recuperar, atualizar, excluir e a inserção de dados.

Sintaxe de ligação de dados

Expressões de ligação de dados estão contidos nos delimitadores <%# e %> e no uso das funções Eval e Bind.A função Eval é usada para definir vinculação unidirecional (Somente leitura).A função Bind é usada para ligação bidirecional (atualizável).Além de poder chamar os métodos Eval e Bind para executar associação de dados em uma expressão de ligação de dados, você pode chamar qualquer código publicamente escopado dentro dos delimitadores <%# e %> delimitadores para executar esse código e retornar um valor durante o processamento de página.

Expressões de ligação de dados são resolvidas quando o método DataBind de um controle ou da classe Page é chamado.Para controles como os controles GridView,DetailsView, e FormView, expressões de ligação de dados são resolvidos automaticamente durante o evento PreRender do controle e não há necessidade de chamar o método DataBind explicitamente.

O exemplo de código a seguir mostra o uso de expressões de ligação de dados com um controle FormView em um ItemTemplate.

<asp:FormView ID="FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr><td align="right"><b>Product ID:</b></td>       <td><%# Eval("ProductID") %></td></tr>
      <tr><td align="right"><b>Product Name:</b></td>     <td><%# Eval("ProductName") %></td></tr>
      <tr><td align="right"><b>Category ID:</b></td>      <td><%# Eval("CategoryID") %></td></tr>
      <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
      <tr><td align="right"><b>Unit Price:</b></td>       <td><%# Eval("UnitPrice") %></td></tr>
    </table>                 
  </ItemTemplate>                   
</asp:FormView>
<asp:FormView ID="FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr><td align="right"><b>Product ID:</b></td>       <td><%# Eval("ProductID") %></td></tr>
      <tr><td align="right"><b>Product Name:</b></td>     <td><%# Eval("ProductName") %></td></tr>
      <tr><td align="right"><b>Category ID:</b></td>      <td><%# Eval("CategoryID") %></td></tr>
      <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
      <tr><td align="right"><b>Unit Price:</b></td>       <td><%# Eval("UnitPrice") %></td></tr>
    </table>                 
  </ItemTemplate>                 
</asp:FormView>

Usando o método Eval

O método Eval avalia as expressões de dados mais vinculados nos modelos de controles de ligação de dados, como os controles GridView, DetailsView e FormView.Em tempo de execução, o método Eval chama o método Eval do objeto DataBinder, fazendo referência ao item de dados atual da contêiner de nomeação.O contêiner de nomeação é geralmente a menor parte do controle de vinculação de dados que contém um registro inteiro, como uma linha em um controle GridView.Portanto, você pode usar o método Eval somente para ligação em modelos de um controle de vinculação de dados.

O método Eval utiliza o nome de uma campo de dados e retorna uma sequência de caracteres que contém o valor do campo do registro atual na fonte de dados.Você pode fornecer um segundo parâmetro opcional para especificar um formato para a sequência de caracteres retornada.O parâmetro de formato de sequência de caracteres usa a sintaxe definida para o método Format da classe String.

Usando o método Bind

O método Bind tem algumas semelhanças com o método Eval, mas existem diferenças significativas.Embora você possa recuperar os valores dos campos com dados vinculados com o método Bind, como faria com o método Eval, o método Bind também é usado quando os dados podem ser modificados.

No ASP.NET, controles de ligação de dados, como os controles GridView,DetailsView e FormView automaticamente podem usar a atualização, operações de exclusão e de inserção de uma controle da fonte de dados.Por exemplo, se você tiver definido as instruções Selecionar SQL, inserir, excluir e atualizar para o controle da fonte de dados, usar Bind em um modelo de controle GridView, DetailsView, ou FormView permite que o controle extraia valores de controles filho no modelo e passe-as para o controle da fonte de dados.O controle da fonte de dados por sua vez executa o comando apropriado para o banco de dados.Por esse motivo, a função Bind é usada dentro de EditItemTemplate ou InsertItemTemplate de um controle de vinculação de dados.

O método Bind normalmente é usado com controles de entrada como o controle TextBox processados por uma linha GridView em modo de edição.Quando o controle de vinculação de dados cria esses controles de entrada como parte do seu próprio processamento, ele pode extrair os valores de entrada.

O método Bind utiliza o nome de uma campo de dados para associar a propriedade acoplada, como mostrado no exemplo o seguir:

Observação de segurança:

Este exemplo tem uma caixa de texto que aceita entrada do usuário, que é uma ameaça potencial de segurança.Por padrão, páginas Web ASP.NET validam se as entradas de usuário não incluem scripts ou elementos HTML.Para obter mais informações, consulte Visão Geral de Scripts Maliciosos.

<EditItemTemplate>
  <table>
    <tr>
      <td align=right>
        <b>Employee ID:</b>
      </td>
      <td>
        <%# Eval("EmployeeID") %>
      </td>
    </tr>
    <tr>
      <td align=right>
        <b>First Name:</b>
      </td>
      <td>
        <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"
          Text='<%# Bind("FirstName") %>' />
      </td>
    </tr>
    <tr>
      <td align=right>
        <b>Last Name:</b>
      </td>
      <td>
        <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"
            Text='<%# Bind("LastName") %>'  />
      </td>
    </tr>
    <tr>
      <td colspan="2">
        <asp:LinkButton ID="UpdateButton" RunAt="server"
          Text="Update" CommandName="Update" />
        &nbsp;
        <asp:LinkButton ID="CancelUpdateButton" RunAt="server"
          Text="Cancel" CommandName="Cancel" />
      </td>
    </tr>
  </table>
</EditItemTemplate>

Quando o botão Update para a linha é clicado, os valores de cada propriedade de controle acoplado usando a sintaxe Bind são extraídos e passados para o controle da fonte de dados para a operação de atualização.

Chamando o método DataBind explicitamente

Controles como GridView, FormView e DetailsView executam ligações chamando o método DataBind implicitamente quando eles são vinculados a um controle da fonte de dados que usa a propriedade DataSourceID.No entanto, há situações em que você precisa chamar o método DataBind explicitamente.

Uma situação é se você tiver vinculado um controle a um controle da fonte de dados usando a propriedade DataSource ao invés da propriedade DataSourceID.Nesse caso, você precisará chamar o método DataBind explicitamente para executar associação de dados e resolver as expressões de ligação de dados.

Outra situação é se você precisa atualizar manualmente os dados em um controle de vinculação de dados.Considere uma página onde você tem dois controles que exibem informações do mesmo banco de dados (talvez usando diferentes modos de exibição).Nesse caso, talvez seja necessário explicitamente reassociar o controle para dados para manter a exibição de dados sincronizada.Por exemplo, você pode ter um controle GridView exibindo uma lista de produtos e um controle DetailsView que permite aos usuários editar um produto individual.Embora os controles GridView e DetailsView exibam dados da mesma fonte, eles são vinculados a controles de fonte de dados diferentes porque eles usam diferentes consultas para obter seus dados.Um usuário pode atualizar um registro utilizando o controle DetailsView, fazendo com que a atualização seja realizada pelo controle da fonte de dados associado.No entanto, porque o controle GridView está vinculado a um controle da fonte de dados diferente, ela exibirá valores antigos do Registro até que a página seja atualizada.Portanto, depois de os dados serem atualizados pelo controle DetailsView, você pode chamar o método DataBind.Isso faz com que o controle GridView atualize seu modo de exibição assim como reexecutar quaisquer expressões de ligação de dados e código publicamente escopado dentro dos delimitadores <%# e %>.Como resultado, o controle GridView reflete a atualização feita pelo controle DetailsView.

Usando vinculação para uma tabela de pesquisa

Um cenário comum com os controles de ligação de dados é permitir que os usuários possam atualizar ou inserir um valor, selecionando-o a partir de uma tabela de pesquisa usando um controle DropDownList ou outro controle de lista.Nesse caso, o controle de pesquisa está vinculado a um fonte de dados separado que retorna a lista dos valores possíveis, e o valor do controle de pesquisa selecionado é acoplado a um campo na linha de vinculação de dados pai.

Você pode adicionar essa funcionalidade da seguinte maneira.Primeiro, para o controle de pesquisa, você adiciona um controle de lista (um controle DropDownList ou ListBox) para um modelo em um controle de vinculação de dados assim como um controle GridView, DetailsView ou FormView.Você acopla a propriedade SelectedValue do controle de pesquisa ao campo relacionado na fonte de dados da caixa de controles.Em seguida, você define a propriedade DataSourceID do controle de pesquisa para um controle da fonte de dados que recupera os valores de pesquisa.Você define a propriedade DataTextField do controle de pesquisa para o campo da tabela de pesquisa que contém os valores para exibir e definir sua propriedade DataValueField para o campo da tabela de pesquisa que contém o identificador exclusivo para o valor de pesquisa, se aplicável.

O exemplo de código a seguir mostra um controle DropDownList que é incluído no modelo InsertItemTemplate de um controle FormView (isso também pode ser um modelo InsertItemTemplate de um TemplateField incluídos na propriedade Fields de um controle DetailsView ou a propriedade Columns de um controle GridView).A propriedade SelectedValue do controle DropDownList usa o método Bind para ligação bidirecional para o campo CategoryID da linha atual para o controle FormView.A propriedade DataSourceID do controle DropDownList é definida como um controle da fonte de dados separado que recupera a lista de possíveis nomes de categoria e identificações.A propriedade DataTextField do controle DropDownList é definida para o campo CategoryName da fonte de dados de pesquisa para que seja exibida uma lista de possíveis nomes de categoria.A propriedade DataValueField do controle DropDownList é definida para o campo CategoryID da fonte de dados de pesquisa para o nome de categoria relacionado.Quando um usuário seleciona um nome de categoria a partir da lista, a propriedade SelectedValue do controle DropDownList é definida para a identificação de categoria para o nome de categoria selecionado.

<tr>
  <td align="right"><b>Category:</b></td>
  <td><asp:DropDownList ID="InsertCategoryDropDownList" 
                        SelectedValue='<%# Bind("CategoryID") %>' 
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  </td>
</tr>
<tr>
  <td align="right"><b>Category:</b></td>
  <td><asp:DropDownList ID="InsertCategoryDropDownList" 
                        SelectedValue='<%# Bind("CategoryID") %>' 
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  </td>
</tr>

O mesmo controle de lista também pode ser usado em uma edição modelo de item.

Consulte também

Tarefas

Como: BIND a dados em um controle modelo

Conceitos

Ligando a bancos de dados

Vinculando a objetos corporativos

Vinculando a dados hierárquicos

Visão Geral do Acesso a Dados ASP.NET