Annidare Server Control
di
ASPCode.it
Data di pubblicazione: 29/04/2003
Voto della community: 3,17
(Votanti: 2)
Uno scenario comune nella visualizzazione di dati ripetitivi puo' essere di questo tipo: Nome Categoria Prodotto 1 Prodotto 2 Prodotto 3 Si ripetono i nomi delle varie categorie e, sotto ciascuno di essi, i vari prodotti di quella particolare categoria. In ASP classico, vi erano varie maniere per fare cio'; fra queste l'approccio più comune sarebbe un ciclo For/Next all'interno di un Recordset. Ora, con l'avvento di ASP.Net, possiamo intelligentemente annidare (nesting) i controlli per la ripetizione (DataList, Repeater) per fare ciò. Bisogna riconoscere che tale tecnica, anche se si ha un po' di pratica coi database relazionali, puo' inizialmente 'intimidire', ma una volta compresa appieno, sembrerà perfettamente logica. In questo articolo, useremo un controllo Datalist, l'SQL Managed Provider e il database Northwind (tabelle Categorie e Prodotti). Volendo, avremmo potuto usare facilmente un controllo Repeater per una diversa formattazione dei dati. Ecco i passi per produrre questo scenario: Nell'HTML: 1. Creiamo/istanziamo un controllo DataList (assegniamoli come ID=dlCategories), con un ItemTemplate Container.DataItem=CategoryName 2. All'interno dell'ItemTemplate, creiamo/istanziamo un'altro controllo DataList, con un ItemTemplate Container.DataItem=ProductName. La differenza qui è che usiamo come DataSource '<%#Container.DataItem.Row.GetChildRows("myrelation")%>'. Per il momento non preoccupiamoci del significato, sarà chiaro più avanti. Nella sezione del codice: 1.Costruiamo un normale scenario Database/DataSet (Connection/DataAdapter/DataSet)
Dim strConn as String = "Server=(local);uid=sa;pwd=PWD;database=Northwind"
2. Creiamo un oggetto Command per popolare il DataSet con le Categorie (basato sull'SQL del DataAdapter)
Dim Cmd as New SQLDataAdapter(MySQL,MyConn)
3. Ora aggiungiamo un secondo Command per visualizzare i prodotti per ciascuna categoria
Dim cmd2 As SqlDataAdapter = New SqlDataAdapter("select * from Products", MyConn)
4. Questa è la parte cruciale. Creiamo una relazione (Relation) (pensiamo alla relazione PrimaryKey/ForeignKey che sarebbe necessaria nella struttura del database per questo scenario). Ecco come funziona!!
ds.Relations.Add("myrelation", _
5. Infine, eseguiamo il DataBind
dlCategories.Datasource=ds.Tables("NWCategories").DefaultView Come potete vedere, la parte più ardua è svolta dalla sezione che aggiunge la relazione fra i due DataList. Niente male, no? Di seguito riportiamo il codice completo.
<%@ Import Namespace="System.Data" %> Si ringrazia aspnet101.com per la gentile concessione dell'articolo (Nesting Server Controls, lingua inglese)
|
||||||||||||||||||||||||