• Non ci sono risultati.

La navigazione nei dati sfruttando Asp .NET 2.0

Di Lorenzo Maiorfi

RUBRICHE

SVILUPPO

SVILUPPO

ponente SqlDataSource prevede un minimo rappresentato da una stringa di connessione e da un co-mando di select, come indicato nel frammento che segue:

<asp:SqlDataSource runat=”server”

id=”srcProdotti”

ConnectionString=”server=localhost;da-tabase=Northwind;uid=sa;pwd=”

SelectCommand=”SELECT ProductID, ProductName, QuantityPerUnit,

UnitPrice, UnitsInStock, Discon-tinued FROM Products” />

Ciò che sorprende è la semplicità con cui è possibile inserire nella pagina una griglia, rappresentata da un’istanza del nuovo controllo GridView, in grado di visualizzare i dati relativi all’oggetto SqlData-Source in questione in maniera tale che sia possibile ordinare i dati clic-cando sulle intestazioni di colonna ed utilizzando una vista paginata che riporti un massimo di 10 righe per pagina:

<asp:GridView ID=”gvProdotti” runat=

”server” DataSourceID=”srcProdotti”

AllowPaging=”True” AllowSorting=”True”

/>

L’aspetto relativo alla GridView configurato come sopra è illustrato in figura ❶, dalla quale è possibile identificare i controlli relativi alla paginazione e all’ordinamento.

Occorre inoltre tenere conto del fatto che il controllo GridView è parte della nuova architettura uni-ficata per la generazione di codice di “markup” dipendente dal devi-ce utilizzato per navigare all’inter-no dell’applicazione. Se si visualiz-za la stessa GridView contenente la lista dei prodotti del catalogo Nothwind all’interno di un disposi-tivo WAP, ad esempio, verrà visua-lizzata la lista riportata in figura ❷, in cui anche il comportamento del controllo in termini di interazione con l’utente viene modificato dal

controllo stesso per realizzare con una modalità differente gli stessi aspetti funzionali.

Un requisito che tipicamente ri-scontriamo nello sviluppo di pagi-ne adibite alla navigaziopagi-ne all’in-terno di una base dati è quello di fornire una vista master/detail (o testata/righe, all’italiana) per una coppia di entità modellate. Il clas-sico esempio, che ritroviamo anche nel database dimostrativo Northwind, è quello relativo alla navigazione della lista degli ordini e, per ciascun ordine selezionato, alla visualizzazione dei dettagli dell’ordine (articolo, quantità, prezzo unitario ecc.). In tale circo-stanza si rende necessario che la pagina in questione includa uno o più controlli che possano essere utilizzati come filtro per la visualiz-zazione dei dati. Nel nostro video utilizziamo questo approccio per visualizzare, ad esempio, la lista degli ordini effettuata da un deter-minato cliente, selezionato all’in-terno di una ComboBox contenen-te la lista di tutti i clienti censiti nel database.

Per implementare questo compor-tamento è sufficiente predisporre di nuovo un oggetto di tipo SqlDa-taSource configurato come segue:

<asp:SqlDataSource runat=”server”

ID=”srcOrdiniCliente”

ConnectionString=”server=localhost;da-tabase=Northwind;uid=sa;pwd=;”

SelectCommand=”SELECT OrderID,Or-derDate FROM Orders

WHERE CustomerID=@Selec-tedCustomerID

ORDER BY OrderDate”>

<SelectParameters>

<asp:ControlParameter Na-me=”SelectedCustomerID”

Control=”cboClienti” Property-Name=”SelectedValue” />

</SelectParameters>

</asp:SqlDataSource>

in cui il controllo contenente la lista di tutti i clienti è configurato come segue:

<asp:DropDownList DataSource=”srcTut-tiClienti”

DataTextField=”CompanyName” DataVa-lueField=”CustomerID”

AutoPostback=”True” runat=”server” />

Come era prevedibile, il controllo in questione fa riferimento ad un’altro oggetto SqlDataSource configurato come illustrato di se-guito:

<asp:SqlDataSource runat=”server”

ID=”srcTuttiClienti”

ConnectionString=”server=localhost;da-tabase=Northwind;uid=sa;pwd=;”

SelectCommand=”SELECT Custome-rID,CompanyName FROM Customers

ORDER BY CompanyName” />

La pagina ottenuta utilizzando le due istanze di SqlDataSource illu-strate ed una GridView che, insie-me alla ComboBox per la selezione del cliente, visualizza l’elenco degli ordini del cliente selezionato, è ri-portata in figura ➌. Anche in questo caso, è opportuno sottolineare che non abbiamo avuto alcuna neces-sità di intervenire sul codice C# re-lativo al code-behind della pagina, ma abbiamo operato sempre solo in maniera visuale e molto spesso as-sistita da appositi wizard che guida-no nella configurazione dei control-li, dei parametri e di tutti gli aspetti degli oggetti DataSource.

Oltre a quanto visto, i controlli Da-taSource realizzano numerose fun-zionalità di supporto che

permetto-❷

RUBRICHE

SVILUPPO

no allo sviluppatore di definire in maniera dichiarativa ciò che tipica-mente richiede la scrittura di codice che risulta, come già detto, spesso ripetitivo. In estrema sintesi, infatti, un controllo DataSource sostituisce il codice di accesso ai dati che in ASP.NET 1.x risulta necessario per la generazione di un determinato resultset (o rowset). Anziché scrive-re una funzione che scrive-restituisce ad esempio un DataSet contenente i dati da visualizzare è sufficiente istanziare un controllo DataSource, anche solo collocandolo all’interno della pagina (a run-time un control-lo DataSource è invisibile) e impo-stare le proprietà che definiscono quali dati gestire. Abbinando il con-trollo DataSource ad un concon-trollo di visualizzazione (concretamente va-lorizzando per quest’ultimo l’attri-buto DataSourceID), quale una GridView, ad esempio, si predispo-ne il controllo stesso ad accedere al-la fonte dati automaticamente ogni qualvolta ci sia necessità di farlo. È importante notare che, qualora ce ne sia necessità, è comunque possi-bile intervenire attraverso la scrittu-ra di codice sul comportamento pre-definito esibito da un oggetto Data-Source, anche se nella grande mag-gioranza dei casi ciò non dovrebbe servire. Inoltre va notato che le fun-zionalità tipiche di un oggetto Data-Source non comportano una pena-lità di performance rispetto alle stesse funzionalità implementate

con l’approccio “tradizionale” ma, anzi, sfruttando apposite metodolo-gie di caching, permettono presta-zioni molto spesso superiori ed in ogni caso mai inferiori a quanto ot-tenibile con il data-binding tipico di ASP.NET 1.x.

Anche se torneremo più volte e più in dettaglio sugli argomenti di que-sto mese, vale la pena di fare una prima carrellata sulle tipologie di controllo DataSource già presenti all’interno del framework .NET 2.0, anche se è possibile che quelle elencate possano non essere le uni-che rilasciate nella versione defini-tiva così come è molto probabile che ne seguiranno di nuove nei me-si succesme-sivi a tale rilascio.

Tutte le classi relative a oggetti Da-taSource sono definite all’interno del namespace System.Web.

UI.WebControls e derivano dalla classe base DataSourceControl o dalla classe base HierarchicalData-SourceControl.

Le classi previste già nella versione beta 2 sono:

S

SqqllDDaattaaSSoouurrccee - è il controllo utiliz-zato per la maggior parte delle fun-zionalità di accesso a dati relaziona-li. Può essere utilizzato per accede-re a SQL Server (attraverso le classi del namespace SqlClient), Oracle e a tutte le fonti per le quali sia dispo-nibile un provider OleDB o ODBC.

A

AcccceessssDDaattaaSSoouurrccee - permette l’ac-cesso specifico a database di

Micro-soft Access. Probabilmente segui-ranno molti altri controlli di tipo Da-taSource dedicati ad altri database in maniera specifica.

X

XmmllDDaattaaSSoouurrccee - permette la navi-gazione di documenti XML in ma-niera gerarchica, per effettuare il data-binding in controlli quali il TreeView.

D

DaattaaSSeettDDaattaaSSoouurrccee - espone le fun-zionalità necessarie a navigare strutture XML non gerarchiche, quali, ad esempio, un DataSet ADO.NET.

S

SiitteeMMaappDDaattaaSSoouurrccee - utilizza un fi-le XML gerarchico per alimentare gli specifici controlli che in ASP.NET 2.0 permettono la naviga-zione all’interno di un sito, quali i menù di navigazione.

O

ObbjjeeccttDDaattaaSSoouurrccee - permette allo sviluppatore di interagire con uno strato di oggetti personalizzati che implementino una semantica relati-va ad operazioni di lettura e scrittu-ra dei dati di un’applicazione. Gscrittu-ra- Gra-zie a questo controllo è possibile im-plementare la business logic del-l’applicazione sviluppando un mo-dello ad oggetti che astragga le en-tità modellate fisicamente all’inter-no di un database (o semplicemente in un modello logico) e al contempo utilizzare controlli standard (quali GridView o DetailView) per imple-mentare rapidamente l’interfaccia utente per la gestione delle funzio-nalità di navigazione dei dati.

Per questo mese la nostra panora-micasi conclude qui, ma non man-cheremo di tornare spesso sugli ar-gomenti di questo numero, così co-me su altri aspetti strutturali legati all’accesso ai dati, nei mesi a veni-re, soprattutto in considerazione dell’importanza che tali argomenti rivestono nello sviluppo di quasi tutte moderne applicazioni web ba-sate su piattaforma Microsoft.

Come di consueto, vi diamo appun-tamento al nostro portale per svi-luppatori .NET (http://dotnet.inno-vactive.it) e al nostro forum tecnico (http://forum.innovactive.it) per tut-te le novità e gli approfondimenti di quanto visto in queste pagine e nel video contenuto nel Cd-Rom della

rivista.

Pro

Grafica eccellente

Multiplayer ben strutturato

Maggiore libertà d’azione

Contro

Poche innovazioni

Produttore: Ubisoft. Pagina Web:

www.splintercell.com

Distributore: Ubisoft, Via E. Fermi 11/2, 20090 Buccinasco (MI); tel.

02-4886711, fax 02-48867137. Pagina Web:

www.ubisoft.it. E-mail: info@ubisoft.it

REQUISITI MINIMI

Processore: Intel Pentium III a 1.4 GHz o equivalente

Memoria (MByte): 256

Scheda video/memoria (MByte):

compatibile Direct 3D (DirectX 9.0c)/64 Spazio libero su disco (MByte): 4.000 Altro: collegamento Internet (modem 56,6 Kbps o banda larga)

LAB