Antonio Feliziani
a- a+

Single Value e Repeated Data Binding

Il Data Binding è un metodo usato da ASP.NET per collegare dei dati ad un controllo Web. Lo scopo è di facilitare l’integrazione tra la pagina ASP.NET e le sorgenti dati riducendo la scrittura di codice per la gestione. IlData Binding 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 Data Binding

Vediamo in azione per primo il Single Value Data Binding.

 

I Single Value Data Binding 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 4 realtà:

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

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

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


# UrlImmagine, # WidthImmagine e # HeightImmagine rappresentano il “collegamento” con le proprietà dell’immagine.
Il codice che realizza le proprietà, poco indicativo vista la semplicità dell’esempio, è il seguente:

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


La corrispondenza proprità/controllo non è automatica: dovete esplicitamente richiamare il “binding” tra i dati nel Page_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 richiamato esplicitamente per ogni controllo.

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

    <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 dipende dall’elemento selezionato nel DropDownList.

 

Repeated Value Data Binding

Il Repeated Data Binding evita la scrittura di cicli per iterare tra collezioni e record. Se pensate alle normali applicazioni, questo rappresenta buona parte del lavoro di una pagina.

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

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

Tra i vari casi presentati, che potete analizzare approfonditamente osservando il codice dell’esempio, ci soffermiamo sullaHashTable, che è visualizzata in un controllo di tipo Repeater.

Il controllo Repeater ha il compito di ciclare gli elementi di una sorgente dati e di visualizzarli secondo un template stabilito da chi costruisce la 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 rimandiamo all’approfondita documentazione Microsoft, ilRepeater è un controllo che deve il suo funzionamento ad una serie di “template” che ripete per tutti i dati 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 questo caso 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 Hash Table contenente 4 elementi, una descrizione ed un valore. Successivamente viene associata la sorgente dati (con il metodo DataSource) alRepeater. Infine, come avviene 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, soprattutto se si considera che la maggior parte delle applicazioni accede a sorgenti dati. È possibile sfruttare il Data Binding sia con dati semplici e univoci, sia con collezioni. Ma il loro uso più efficace, come vedremo la prossima puntata, è con le basi di dati e ADO.NET.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Graziano
Hai qualche domanda da fare?