Uncategorized

Repeater nidificati

Se lavorate con siti in ASP.net avrete senza dubbio verificato la potenzialità del controllo repeater che, collegato a una fonte dati, può automaticamente creare un elenco a partire dai singoli record con un minimo sforzo di programmazione. Una caratteristica di questo controllo molto utile è quella di poter essere nidificato, ovvero di permettere la ripetizione di record da tabelle collegate.

Nei
database relazionali naturalmente è comune avere tabelle collegate, in cui tipicamente il record di una tabella (per esempio ogni record di una ipotetica tabella ‘Clienti’) è collegato a molti record di un’altra tabella (‘Ordini’ seguendo l’esempio precedete). Dopo aver creato questa tabella e questo
collegamento, il passo successivo è ricreare questa situazione in una pagina web.

Replicare questo
comportamento con due Reperater nidificati è una cosa piuttosto semplice anche se, per un motivo poco chiaro, la documentazione su internet è
decisamente scarsa. Dopo aver cercato a lungo ho finalmente trovato un articolo molto interessante sul sito della Microsoft, in particolare in questo articolo della KB. In questa entry del blog voglio fare un breve
riassunto degli argomenti trattati nell’articolo secondo l’esperienza che ho fatto creato la pagina delle citazioni di questo sito.

Per prima cosa è necessario creare un oggetto DataSet che conterrà due DataTable, le due tabelle che vogliamo collegare e che rappresentano il  Repeater esterno e quello nidificato. La preparazione della sorgente dai si completa aggiungendo una Relation al DataSet che colleghi i campi corrispondenti delle due tabelle.
Passiamo ora alla preparazione della pagina. Il primo Repeater va aggiunto come da procedura usuale, nel codice della pagina si imposta la sua sorgente dati come una delle tabelle nel DataSet e si avvia il Binding.
Ecco il ‘trucco’, ora. Il secondo controllo Repeater, che normalmente si troverà all’interno di uno degli itemTemplate del primo, va impostato in modo da riceverà la sorgente dati direttamente nella pagina web e non nel codice, in questo modo può essere impostato in maniera ‘dinamica’ a ogni record del Repeater esterno.
La definizione del Repeater nidificato avrà una forma simile a questa:


<asp:repeater id="rptChild" runat="server" DataSource='<%#CType(Container.DataItem, DataRowView).Row.GetChildRows(<i>Nome-dell'oggetto-Relation</i>)%>' >

Ora, all’interno del Repeater
nidificato, i campi possono essere indicati come al solito con la direttiva Eval, salvo per un piccolo dettaglio: i nomi dei campi devo essere racchiusi tra virgolette doppie e tra
parentesi quadre, quindi la sintassi diventa:

 <%#Eval("[""<i>Nome-del-campo</i>""]")%>

Ancora una volta il controllo Repeater dimostra la sua potenza e flessibilità grazie
applicando una tecnica di programmazione un poco più raffinata.

Annunci
Standard

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...