DataGrid, DataList e Repeater: quale usare?

di Daniele Bochicchio, in ASP.NET,

Con ASP.NET, a differenza di Classic ASP, si fa ampio uso di controls particolari, che tramite un meccanismo noto come databinding dei dati permette di associare gli stessi ad una specie di template, guadagnando tra l'altro una netta separazione tra dati, business logic e rappresentazione degli stessi.
Non di rado però si è davanti ad una domanda per molti versi cruciale: meglio usare un datagrid, un datalist o un repeater?
La risposta non è facile, anche se cercheremo di elencare dei casi generali in cui uno dei controls offra vantaggi (o comporti meno svantaggi) rispetto agli altri.

Il DataGrid

Probabilmente è il control più complesso, ma allo stesso tempo il più potente e completo di funzioni.
Di default supporta già la paginazione dei risultati, l'ordinamento, template suddivisi per la modifica ed il rendering.
Insomma, con una trentina di righe di codice è già pronto per essere implementato, potendo sfruttare funzionalità molto avanzate.
Il grosso limite di DataGrid è in alcune sue funzionalità. Per prima cosa il viewstate, che per un datagrid con 4-5 colonne e 300 record può occupare uno spazio molto grande.
In secondo luogo il suo meccanismo di paginazione, basato su PostBack e di default quindi poco utile ad un utilizzo sul web.

Con un sistema di questo genere, infatti, non potrò mai creare un collegamento alla seconda pagina dei risultati, perchè di fatto non sarà possibile, se non tramite giri non proprio ideali.
Ed allora quando è consigliabile usare un datagrid? Semplice: all'interno di intranet senza ombra di dubbio ed in alcune applicazioni online che necessitino di questo genere di funzionalità.
Certamente ha poco senso per un motore di ricerca pubblico e ne ha ancora meno quando il codice HTML (o peggio ancora XHML) debba essere valido secondo gli standard W3C: generando codice in maniera automatica è praticamente impossibile avere codice validato.

Il DataList

I controls DataList e Repeater condividono un concetto molto semplice, seppur con alcune differenza: aggiungere quanto meno codice sia possibile a ciò che lo sviluppatore inserisce. Con Repater è praticamente così, con DataList l'aggiunta è minima.
Il prezzo da pagare è però la mancanza di funzionalità avanzate, quali paginazione o ordinamento, implementabili comunque attraverso codice personalizzato.
Il DataList, attraverso la proprietà RepeatDirection, ad esempio, permette di impostare il flusso di rendering dei dati. Con la modalità orizzontale, gli stessi saranno visualizzati occupando gli spazi in senso orizzontale, mente nella modalità verticale si sistemeranno in modo da riempire prima ciascuna colonna.
Ecco un esempio che potrete lanciare per capire meglio come funziona la proprietà in questione:

<ASP:DataList id="MyDataList" runat="server" RepeatDirection="<b>Vertical</b>" RepeatColumns = "3">
  <ItemTemplate>
    <img src="http://store.aspitalia.com/images/<%# Container.DataItem %>.gif">
  </ItemTemplate>
</ASP:DataList>

<SCRIPT language="vb" runat="server">

Sub Page_Load()
  'creo un array
  Dim arrStore As New ArrayList()
  arrStore.Add("255")
  arrStore.Add("292")
  arrStore.Add("342")
  arrStore.Add("245")
  arrStore.Add("333")

  ' faccio il binding
  MyDataList.DataSource = arrStore
  MyDataList.DataBind()
End Sub

</SCRIPT> 

Basterà sostituire Vertical con Horizontal per cambiare l'orientamento del rendering dei dati, ed il numero 3 della proprietà RepeatColumns per scegliere su quante colonne debbano essere divisi i dati.
Dunque il DataList è molto ma molto utile per creare al volo, ad esempio, vetrine in un sistema di e-commerce: si tratta di impostare un template, scegliere l'orientamento del nostro insieme ed il gioco è fatto.

Il Repeater

Probabilmente il Repeater può sembrare il control meno potente tra i tre. In realtà è quello più flessibile, che ci permette un utilizzo anche in situazioni diverse dalla classica pagina ASP.NET.
Come detto, infatti, non aggiunge output automaticamente, dunque si limita a ripetere il codice contenuto nel template, valorizzando i segnalibri in base ai valori contenuti nel datasource.
Per questo motivo potreste utilizzarlo per creare file csv, di solo testo, file con CSS estratti da database, script JavaScript client side con array popolati al volo, oppure documenti in un qualsiasi formato.
Insomma, è il control più flessibile tra i tre e vi permette, unico nella categoria, di creare ad esempio codice XHTML 1.1 valido.

E' la scelta obbligata se avete bisogno di un sito che rispetti gli standard del W3C ed il risultato non è malvagio (anzi).
Potete vedere un progetto che fa uso solo di repeater su eXtensible.it. Non c'è un modo diverso, se non evitando che ASP.NET scriva automaticamente del codice, di avere documenti XHTML 1.1 validi.
Ovviamente i limiti del repeater sono i suoi grandi vantaggi: è necessario implementare tutto manualmente.
Poca cosa, visto che si può aggirare l'ostacolo attraverso script come questo.

Conclusioni

Alla fine un control vale l'altro. Certamente il DataGrid è il più completo e complesso, ma si paga lo scotto di avere un controllo minore e codice generato automaticamente.
Il DataList è invece un'ottima via di mezzo, l'ideale per avere un po' di potenza del DataGrid, senza per questo rinunciare ad alcune funzionalità, come l'incollonnamento automatico.
Infine, il Repeater è il più flessibile ma allo stesso modo il più povero di funzionalità: la maggior parte delle operazioni avanzate devono essere implementate manualmente.
Ora avete una piccola guida in modo da scegliere il control più adatto in base all'obiettivo che dovete raggiungere.

Approfondimenti

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti