Atributo único | Cliente: <%# custID %> |
Pedidos de coleção | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Expressão Contato | <%# ( customer.FirstName + " " + customer.LastName ) %> |
O valor de retorno do método | Outstanding Balance: <%# GetBalance(custID) %> |
Embora a sintaxe acima seja semelhante à sintaxe de conveniência Response.Write do ASP (<%= %>), seu comportamento é Mas é definitivamente diferente. A sintaxe de conveniência ASP Response.Write calcula o valor enquanto a página está sendo processada, enquanto a sintaxe de ligação de dados ASP.NET calcula o valor apenas quando o método DataBind é chamado.
DataBind é um método da página e de todos os controles do servidor. Quando você chama o DataBind do controle pai, ele chama o método DataBind de todos os controles filho por vez. Por exemplo, DataList1.DataBind() chamará o método DataBind de todos os controles no modelo DataList. Chamar o método DataBind da página – Page.DataBind() ou simplesmente chamar DataBind() – causa a avaliação de todas as expressões de vinculação de dados na página. O método DataBind geralmente só é chamado no evento Page_Load da página, conforme mostrado no exemplo a seguir.
Em qualquer seção declarativa de uma página .aspx, você pode usar a sintaxe de ligação e especificar o tipo de dados esperado pelo tempo de execução para sua avaliação. As propriedades, expressões e métodos simples nos exemplos acima exibem conteúdo de texto ao usuário quando avaliados. Neste caso, o valor da expressão de ligação de dados é do tipo String. No exemplo de coleção acima, o tipo de valor da sintaxe de ligação de dados é a propriedade DataSource do ListBox. Você descobrirá que é necessário converter o tipo do valor na expressão de ligação para produzir os resultados desejados. Por exemplo, se count for um número inteiro:
Número de registros: <%# count.ToString() %>
A sintaxe de vinculação de dados do ASP.NET oferece suporte à vinculação de variáveis públicas, propriedades de página e propriedades de outros controles na página. O exemplo a seguir demonstra como vincular variáveis públicas e propriedades simples da página. Observe que esses valores foram inicializados antes de DataBind() ser chamado.
<linguagem de script="VB" runat="servidor">
Sub Page_Load(remetente como objeto, e como EventArgs)
Página.DataBind
End Sub
Propriedade ReadOnly custID() como String
Pegar
Retornar "ALFKI"
Fim
Propriedade End
Propriedade ReadOnly orderCount() como inteiro
Pegar
Retorno 11
Fim
Fim da propriedade
</roteiro>
<form action="DataBind1_vb.aspx" runat="servidor">
Cliente: <b><%# custID %></b><br />
Pedidos abertos: <b><%# orderCount %></b>
</form>
O exemplo a seguir demonstra como vincular a uma propriedade de outro controle:
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
Estado selecionado: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
Os controles de servidor do tipo lista (como DropDownList, ListBox e HTMLSelect) usam coleções como fontes de dados. O exemplo a seguir demonstra como vincular a um tipo de coleção Common Language Runtime. Esses controles só podem ser associados a coleções que suportam as interfaces Ienumerable, Icollection ou IlistSource. Mais comumente, pode ser vinculado a ArrayList, Hashtable, DataView e DataReader. O exemplo a seguir demonstra como vincular a um ArrayList.
Sub Page_Load(remetente como objeto, e como EventArgs)
Se não forPostBack então
Diminuir valores como ArrayList= new ArrayList()
valores.Add("IN")
valores.Add("KS")
valores.Adicionar("MD")
valores.Adicionar("MI")
valores.Adicionar ("OU")
valores.Add ("TN")
DropDown1.DataSource = valores
DropDown1.DataBind
Terminar se
End SubO
exemplo a seguir demonstra como vincular a um DataView. Observe que a classe DataView é definida no namespace System.Data.
Sub Page_Load(remetente como objeto, e como EventArgs)
Se não forPostBack então
Dim dt como DataTable
Dim dr como DataRow
Dim i As Integer
'Criar DataTable
dt = Nova Tabela de Dados
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
'Preencha alguns dados
For i = 1 To 9
dr = dt.NewRow()
dr(0) = eu
dr(1) = "Item " + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
Se (i Mod 2 <> 0) Então
dr(3) = Verdadeiro
Outro
dr(3) = Falso
Terminar se
'Adiciona linhas de dados à tabela dt.Rows.Add(dr)
Próximo
GridView1.DataSource = Novo DataView(dt)
GridView1.DataBind()
Terminar se
End Sub
O exemplo a seguir demonstra como vincular a uma Hashtable.
Sub Page_Load(remetente como objeto, e como EventArgs)
Se não forPostBack então
Dim h As Hashtable = new Hashtable()
h.Adicionar ("chave1", "valor1")
h.Adicionar ("chave2", "valor2")
h.Add ("key3", "value3")
MyDataList.DataSource = h
MinhaDataList.DataBind
Terminar se
End Sub
Freqüentemente, você pode querer processar dados antes de vinculá-los à página ou ao controle. O exemplo a seguir demonstra como vincular expressões e valores de retorno de método.
Sub Page_Load(remetente como objeto, e como EventArgs)
Se não forPostBack então
Dim valores como ArrayList= novos
valores ArrayList().Add (0)
valores.Adicionar (1)
valores.Adicionar (2)
valores.Adicionar(3)
valores.Adicionar(4)
valores.Adicionar(5)
valores.Adicionar (6)
DataList1.DataSource = valores
DataList1.DataBind
Terminar se
End Sub
Function EvenOrOdd (número como inteiro) como string
Se (número Mod 2 <> 0) Então
Retornar "Estranho"
Outro
Retornar "Par"
Terminar se
Função final
<asp:DataList id="DataList1" ……>
<ItemTemplate>
Valor numérico: <%# Container.DataItem %>
Par/Ímpar: <%# EvenOrOdd(Container.DataItem) %>
</ItemTemplate>
</asp:DataList>
O componente ASP.NET Page Framework fornece um método estático que avalia uma expressão de vinculação de dados de ligação tardia e, opcionalmente, formata o resultado como uma cadeia de caracteres. Nesse caso, DataBinder.Eval é conveniente porque elimina grande parte do trabalho de conversão explícito que o desenvolvedor deve realizar para converter a estimativa no tipo de dados desejado. É particularmente útil quando há controles vinculados a dados em uma lista de modelo, porque nesse caso normalmente tanto as linhas de dados quanto os campos de dados devem ser convertidos.
Dê uma olhada no exemplo a seguir, que precisa exibir um número inteiro como uma string de moeda. Na sintaxe de ligação de dados padrão do ASP.NET, você deve primeiro converter o tipo da linha de dados para recuperar o campo de dados IntegerValue. Em seguida, passe-o como parâmetro para o método String.Format.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
Esta sintaxe é muito complicada e não é fácil de lembrar. Por outro lado, DataBinder.Eval é um método simples com apenas três parâmetros: o contêiner de nomenclatura do item de dados, o nome do campo de dados e a string de formato. Em controles de modelo (como FormView, GridView, DetailsView, DataList ou Repeater), o contêiner nomeado é Container.DataItem. Page é outro contêiner nomeado que também pode ser usado para DataBinder.Eval. Como mencionamos anteriormente, o ASP.NET 2.0 fornece uma nova sintaxe simplificada (Eval) para DataBinder.Eval, que você pode usar em modelos de controle vinculados a dados para analisar automaticamente Container.DataItem.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
O parâmetro de string de formato é opcional. Se este parâmetro for omitido, DataBinder.Eval retornará um valor do tipo Object, conforme mostrado abaixo:
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %> O que
devemos prestar atenção é que , com o padrão Comparado com a sintaxe de vinculação de dados, DataBinder.Eval afetará significativamente o desempenho porque usa reflexão de vinculação lenta. Use DataBinder.Eval com sabedoria, especialmente se você não precisar formatar a string.