Antonio Feliziani
a- a+

Single Value e Repeated Data Binding

Il Data Binding èun metodo usato da ASP.NET per collegare dei dati ad uncontrollo Web. Lo scopoè di facilitare l’integrazione tra la paginaASP.NET e le sorgenti dati riducendo la scrittura di codiceper la gestione. IlDataBinding può essere di due tipi:

  • Single Value, quando si lega un solo valore al controllo
  • Repeated Value, quando si gestiscono collezioni o record

 

Single Value DataBinding

Vediamo in azione per primo il Single Value Data Binding.

 

I Single Value DataBinding possono essere usati con le Proprietà,i Metodi, le Espressioni e i Controlli

L’esempio illustra come sia possibile applicare iSingle Value Data Binding a 4realtà:

  1. le Proprietà
  2. i Metodi
  3. le Espressioni
  4. i Controlli

Nel caso di una proprietà, l’esempio imposta ilpercorso e le dimensioni di un’immagine:

    <asp:Image id="immagine" runat="server" ImageUrl="<%# UrlImmagine %>" Width="<%# WidthImmagine %>" Height="<%# HeightImmagine %>" />


# UrlImmagine, # WidthImmagine e # HeightImmaginerappresentano il “collegamento” con leproprietà dell’immagine.
Il codice che realizza le proprietà, poco indicativovista la semplicità dell’esempio, è ilseguente:

    ReadOnly Property UrlImmagine() As String    GetReturn "images/parigi.jpg"    End Get  End Property   ReadOnly Property WidthImmagine() As Unit    GetReturn Unit.Pixel(200)    End Get  End Property    ReadOnly Property HeightImmagine() As Unit    GetReturn Unit.Pixel(291)    End Get  End Property


La corrispondenza proprità/controllo non èautomatica: dovete esplicitamente richiamare il “binding” tra i dati nelPage_Load, con un’istruzione del tipo:

    Sub Page_Load(sender as Object, e as EventArgs)     DataBind() End Sub


Oltre a livello di pagina, il Data Binding può essere richiamatoesplicitamente per ogni controllo.

È interessante notare come il Data Binding sia possibile anche tra duecontrolli:

    <form runat=”server”><asp:DropDownList id="Colori" runat="server"><asp:ListItem>Rosso</asp:ListItem><asp:ListItem>Verde</asp:ListItem><asp:ListItem>Giallo</asp:ListItem><asp:ListItem>Arancione</asp:ListItem><asp:ListItem>Celeste</asp:ListItem><asp:ListItem>Nero</asp:ListItem><asp:ListItem>Bianco</asp:ListItem>     </asp:DropDownList><input type="submit" value="Invia" runat="server"><p>Hai scelto il colore: <asp:label text=’<%# Colori.SelectedItem.Text %>‘ runat="server" /></form>


In questo caso, il valore del controllo label dipendedall’elemento selezionato nel DropDownList.

 

Repeated Value DataBinding

Il Repeated Data Bindingevita la scrittura di cicli per iterare tra collezioni erecord. Se pensate alle normali applicazioni, questorappresenta buona parte del lavoro di una pagina.

Le sorgenti dati che è possibile utilizzare con iRepeatedData Bindingsono molteplici, tra cuiCollection, ArrayList e gli oggetti forniti da ADO.NET (DataView,DataSet e DataReader).

La pagina d’esempio visualizza alcune sorgenti di daticollegate ad unaArrayList, unaHashTable e unaSortedList.

Tra i vari casi presentati, che potete analizzareapprofonditamente osservando il codice dell’esempio, cisoffermiamo sullaHashTable, che è visualizzata in uncontrollo di tipo Repeater.

Il controllo Repeater hail compito di ciclare gli elementi di una sorgente dati e divisualizzarli secondo un template stabilito da chi costruiscela pagina.

Ecco il codice che realizza la lista di prodotti e prezzi:

    <hr noshade="true" size="1" width="100%"> <asp:Repeater id="acquisti" runat="server">     <HeaderTemplate>    <table border="0" cellpadding="0" cellspacing="0">    <tr><td width="100" bgcolor="#C0C0FF"><b>Bene</b></td><td width="100" bgcolor="#C0C0FF"><b>Prezzo</b></td>    </tr>    </HeaderTemplate>     <ItemTemplate>     <tr> <td width="100" bgcolor="#FFFFC0"><%# Container.DataItem.Key %></td> <td width="100" bgcolor="#FFFFC0"><%# DataBinder.Eval(Container.DataItem,"Value" ,"{0:c}") %></td>     </tr> </ItemTemplate> <AlternatingItemTemplate>     <tr> <td width="100" bgcolor="#C0C0C0"><%# DataBinder.Eval(Container.DataItem,"Key") %></td> <td width="100" bgcolor="#C0C0C0"><%# DataBinder.Eval(Container.DataItem,"Value" ,"{0:c}") %></td>     </tr> </AlternatingItemTemplate> <SeparatorTemplate>     <tr> <td colspan="2" width="200" background="images/separatore.gif" height="17" bgcolor="#C0FFC0"><img src="images/space.gif" height="1"></td>     </tr> </SeparatorTemplate>     <FooterTemplate>    </table>    </FooterTemplate>     </asp:Repeater>


Anche se non entriamo nel dettaglio, ma vi rimandiamoall’approfondita documentazione Microsoft, ilRepeater è un controllo che deve il suofunzionamento ad una serie di “template” che ripete per tutti idati della sorgente dati associata.

Il questo esempio, i template utilizzati sono:

  • Header: visualizza un’intestazione che precede l’elenco dei valori
  • ItemTemplate: il template con il quale sono visualizzate le righe dispari di dati (se presente AlternatingItemTemplate, altrimenti tutte le righe)
  • AlternatingItemTemplate: il template (se presente) con il quale sono visualizzate le righe dispari di dati
  • SeparatorTemplate: cosa visualizzare tra una riga e l’altra di dati
  • FooterTemplate: come chiudere la visualizzazione della sorgente dati

Ci rimane da vedere il codice che, durante il Page_Load, lega il Repeater con la sorgente dati (in questocaso una Hash Table).

    Dim htAcquisti as New HashTable(4) htAcquisti.Add("Latte" ,1500)    htAcquisti.Add("Burro" ,4000)    htAcquisti.Add("Pane" ,2500)    htAcquisti.Add("Pasta" ,2000)     acquisti.DataSource = htAcquisti


È creata una HashTable contenente 4 elementi, una descrizione ed unvalore. Successivamente viene associata la sorgente dati (conil metodo DataSource)alRepeater. Infine, comeavviene con il Single Value Data Binding, è scatenato“l’aggancio” tra controllo e dati:

    Page.DataBind()


All’interno del controllo Repeater sono richiamati:

  • Container.DataItem.Key - questa scrittura indica di visualizzare la chiave della Hash Table (il nome del prodotto) dell’elemento sul quale il controllo sta ciclando. Per riferirsi al controllo associato è sufficiente utilizzare Container come nome dell’oggetto
  • DataBinder.Eval(Container.DataItem,”Value”,”{0:c}”) - qui vogliamo prelevare il valore del prodotto (Value), ma non ci basta: vogliamo anche convertirlo in valuta

 

Conclusione

Il Data Binding è tra le funzionalitàpiù potenti e personalizzabili di ASP.NET, soprattuttose si considera che la maggior parte delle applicazioniaccede a sorgenti dati. È possibile sfruttare il Data Binding sia con datisemplici e univoci, sia con collezioni. Ma il loro usopiù efficace, come vedremo la prossima puntata,è con le basi di dati e ADO.NET.