IntroduzioneLa
Gridview è nata con lo scopo di aggiungere una serie di interfacce e funzionalità che mancavano al buon vecchio Datagrid, come ad esempio il
sorting, il
paging o tutte le operazioni con i record, che attualmente bisogna implementare con un bel po? di codice. Oltre a queste aggiunte, con l?avvento del nuovo framework, l?intera struttura dei controlli è stata rivisitata, e sono stati rivisti molti controlli, compresi il Datalist che è diventato
DatalistView e nuovi controlli come il
DetailsView e il
FormView.
Prima novità: Connessione sorgente datiUna delle novità più utili è senza dubbio la connessione a una sorgente dati, che può essere un classico database, un file XML oppure, grande novità, un oggetto personalizzato (Business Object) che ci permette di collegarci a una classe già pronta. In questo articolo utilizzeremo la connessione più classica a
SQL server.
Iniziamo con importare il nostro controllo nella pagina aspx, quindi andiamo nella toolbox del nostro
Visual Web Developer e noteremo che i controlli che gestiscono i dati sono stati classificati nel ramo
Data.
Trasciniamo il controllo nella pagina, e visto che Microsoft vuole semplificarci ancora di più la vita, apparirà una finestra di dialogo contestuale con le operazioni più comuni che possiamo effettuare con il GridView. Ricordano molto il funzionamento degli
Smart Tags di Microsoft Office che pochi conoscono ma che implementati nel contesto di
Visual Studio .NET 2005 facilitano enormemente l'uso dei nuovi oggetti. Questa è una delle novità di Visual Studio .NET 2005, per chi volesse vederne altre può leggere questo recente articolo:
http://www.dotnethell.it/articles/VisualStudioWhidbey.aspx ">
http://www.dotnethell.it/articles/VisualStudioWhidbey.aspx Utilizziamo questa finestra per selezionare la nostra sorgente dati dal menù a tendina, e ci apparirà un Wizard dove selezioneremo come tipo di sorgente SQL Server, dopo di che ci verrà chiesto si specificare una connessione dati, e ciccando sul tasto new possiamo configurare la nostra connessione.
Una volta configurata la connessione continuiamo nella creazione della sorgente dati; ci viene inoltre proposto anche la possibilità di salvare la nosta connessione nel
web.config, se accettate nel file comparirà un nuovo elemento
, che potrà essere recuperato in ogni parte della nostra applicazione.
<connectionStrings>
<add name="AppConnectionString1" connectionString="Server=(local);UserID=sa;Password=sa;Database=Northwind;Persist Security Info=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Continuando ci viene proposto di selezionare la query di
SELECT, basta selezionare il nome della tabella dal menu a tendina e i campi che desideriamo visualizzare:
Ed il nostro controllo è pronto; ora analizziamo il codice che è stato prodotto con questi semplici click, noterete che sono comparsi due controlli, il
GridView e un oggetto
SqlDataSource. Il primo ha un codice molto simile al datagrid, con l?elenco dei campi del database, con l?aggiunta del
DataSourceID che identifica da quale sorgente preleviamo i dati.
<asp:GridView ID="GridView1" Runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="CompanyName" DataField="CompanyName" SortExpression="CompanyName"></asp:BoundField>
</Columns>
...
Il secondo invece contiene l?informazione della stringa di connessione (
ConnectionString) e della query (
SelectCommand), se si è scelto di utilizzare il web.config per la connessione noterete il tag
<%$ che indica la stringa di connessione nel file di configurazione.
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT [CompanyName], [ContactName], [City], [Country], [Phone] FROM [Customers]" ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">
</asp:SqlDataSource>
Modificare / Eliminare i datiAlcune delle operazioni più gettonate del DataGrid erano la modifica e la eliminazione dei record; la
GridView semplifica anche queste operazioni. Per la modifica dei dati è necessario aggiungere un bottone di
Edit, comparirà una nuova colonna con il link per la modifica. Andando sulla pagina creata noterete il link di modifica, cliccando sul link automaticamente tutti i campi
DataBound diventeranno dei textbox.
La modifica del record non è implementata di default (va bene aiutarci..., ma non esageriamo!), per questa operazione il
GridView utilizza il datasource, e in particolare l?attributo
UpdateCommand. Per configurarlo è necessario selezionare la voce
Updatequery nella finestra delle proprietà del datasource.
Comparirà una finestra Wizard dove scrivere la nostra query di update, che si presenterà così:
UPDATE dbo.Customers SET CompanyName = @CompanyName WHERE (CustomerID = @CustomerID)Come si può notare per ricavare i valori dai textbox non bisogna far altro che precedere il nome del campo con una chiocciola, in questo modo cliccando il link di Update il DataSource eseguirà la query di update.
Lo stesso procedimento si utilizza per eliminare dei record, quindi si aggiunge il bottone per l?eliminazione e si popola l?attributo
DeleteCommand con la query per l?eliminazione.
DELETE FROM dbo.Customers WHERE (CustomerID = @CustomerID)Un altro controllo: la DetailsViewContinuiamo la nostra breve carrellata con un?altra novità, la
DetailsView. Questo controllo non è altro che una schermata di dettaglio, e uno dei suoi grandi pregi è che possiamo collegarlo al nostro GridView con poche righe di codice, per presentare una breve schermata di dettaglio del nostro record.
Trasciniamo il controllo nella nostra pagina, e impostiamo come abbiamo fatto per il GridView una nuova sorgente dati, definiamo la nostra stringa si select.
SelectCommand="SELECT * FROM customers"Dopo di che indichiamo il filtro che la sorgente dati deve applicare per visualizzare il dettaglio del record che desideriamo, in questo caso il nostro filtro sarà il
CustomerID.
FilterExpression="customerid='@customerid'"Per concludere dobbiamo definire i parametri di filtro, indicando che il controllo da cui dobbiamo recuperare il parametro è il nostro GridView principale, inoltre indichiamo anche allo scatenarsi di quale evento il nostro
DetailsView deve attivarsi, in questo caso il controllo è
GridView1 e l?evento è
SelectedValue (selezione di un valore).
<filterparameters>
<asp:ControlParameter Name="customerid" ControlId="GridView1"
PropertyName="SelectedValue" />
</filterparameters>Ora non dovremo far altro che aggiungere al nostro datagrid un bottone di selezione dalla gestione dei campi del GridView ed il gioco è fatto.
Come potete vedere le Table HTML renderizzate a runtime non sono scadenti (relativamente ai colori) come quelle create dal DataGrid di ASP.NET 1.x. Questo è dovuto al fatto che con il
Framework 2.0 si possono applicare dei
Temi/Stili e/o
Skins agli oggetti. Per chi fosse interessato ne abbiamo parlato più diffusamente qui:
http://www.dotnethell.it/articles/ASPNETThemesSkins.aspx ">
http://www.dotnethell.it/articles/ASPNETThemesSkins.aspx Paging e Sorting con la GridviewConcludiamo dedicando poche righe alla navigazione delle pagine e all?ordinamento.
Qualcuno si ricorda come si faceva con il DataGrid? Scordatevelo! Per quanto riguarda l?ardinamento non dovrete far altro che impostare l?attributo
AllowSorting="True"E indicare nel campo del gridview l?espressione di ordinamento
SortExpression="companyname"Naturalmente Microsoft ci è venuta ancora incontro, cliccando la prima volta sul link per l?ordinamento ordina in modo crescente, cliccando una seconda volta in ordine decrescente.
Impostare l?impaginazione è molto simile, bisogna impostare l?attributo
AllowPaging.
AllowPaging="True"E in seguito l?attributo con il numero di record per pagina
PageSize="5"E per fare tutto il resto ci pensa il Framework!
ConclusioniIn questo articolo abbiamo analizzato solo alcune delle più importanti novità introdotte con il
Framework 2.0, e come si può notare sono sostanziali semplificazioni e riduzioni di codice. Se uno sviluppatore amante del codice (come il sottoscritto) vedrà in tutto questo una minaccia per il proprio lavoro, anche se avrà l?impressione che sua sorella/fratello minore possa programmare applicazioni web, vorrei rassicurarlo, queste facilitazioni ci daranno la possibilità di concentrarci sul miglioramento delle interfacce, e più quest?ultime saranno complicate, più sarà necessario scrivere codice, come si dice in questi casi "Quando il gioco si fa duro, i duri incominciano a giocare" :).