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 i
- le Proprietà
- i Metodi
- le Espressioni
- 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 “
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 (
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