GridView e AccessDataSource per l'accesso ai dati con ASP.NET 2.0

di Andrea Zani, in ASP.NET 2.0, ADO.NET,

Nella nuova versione di ASP.NET sarà presente il GridView, un webcontrol completamente nuovo che prenderà il posto del DataGrid da cui eredita molte funzionalità.
Tra l'altro il GridView ne aggiunge altre per facilitare il lavoro degli sviluppatori, con personalizzazioni e funzionalità che sono state maggiormente facilitate: chi utilizza il DataGrid sa cosa vuol dire inserire la paginazione, impostare a edit la riga di un record e così via.
Operazioni abbastanza semplici ma che impongono allo sviluppatore la scrittura di codice.

Nel GridView tutto è automatizzato ed il numero di linee di codice è praticamente zero. Vediamo un esempio che è possibile scaricare completamente come allegato:

<asp:GridView ID="GridView1" Runat="server" DataSourceID="AccessDataSource1" DataKeyNames="id" AutoGenerateColumns="true" AllowPaging="True">
  <Columns>
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"></asp:CommandField>
  </Columns>
</asp:GridView>

Nelle proprietà del GridView è stata impostata la paginazione ed è stata aggiunta una nuova colonna con il CommandField dove abbiamo attivato i i pulsanti per cancellare il record e per la modalità di editing.

Tra le proprietà del control è presente "DataSourceID", un'altra novità.
Definendo un webcontrol all'interno di una pagina, che non produrrà nessun output, possiamo inserire i datasourcecontrol con i quali è possibile agganciarci a qualsiasi fonte di dati.
Per database SQL Server abbiamo a disposizione "SqlDataSource", per Access "AccessDataSource". Vediamo quest'ultimo in un banale esempio per una select:

<asp:AccessDataSource ID="AccessDataSource1" Runat="server" DataFile="~/articoli.mdb" SelectCommand="SELECT * FROM [Articoli]" />

Nella proprietà "DataFile" abbiamo inserito il nome del database, in "SelectCommand" la query per la richiesta dati.
Se il nostro obiettivo è la visualizzazione di una tabella, esso è concluso con due controls.

Le potenzialità del datasource non finiscono qua, perchè bastano poche proprietà per ottenere altre funzionalità come la possibilità per il GridView di cancellare o modificare record:

<asp:AccessDataSource ID="AccessDataSource1" Runat="server" DataFile="~/articoli.mdb"
    DeleteCommand="DELETE FROM [Articoli] WHERE [id] = ?"
    InsertCommand="INSERT INTO [Articoli] ([id], [articolo], [quantita], [categoria]) VALUES (?, ?, ?, ?)"
    SelectCommand="SELECT [id], [articolo], [quantita], [categoria] FROM [Articoli] ORDER BY [id]"
    UpdateCommand="UPDATE [Articoli] SET [articolo] = ?, [quantita] = ?, [categoria] = ? WHERE [id] = ?">
    <DeleteParameters>
      <asp:Parameter Type="Int32" Name="id"></asp:Parameter>
    </DeleteParameters>
    <UpdateParameters>
      <asp:Parameter Type="String" Name="articolo"></asp:Parameter>
      <asp:Parameter Type="Int32" Name="quantita"></asp:Parameter>
      <asp:Parameter Type="String" Name="categoria"></asp:Parameter>
      <asp:Parameter Type="Int32" Name="id"></asp:Parameter>
    </UpdateParameters>
    <InsertParameters>
      <asp:Parameter Type="Int32" Name="id"></asp:Parameter>
      <asp:Parameter Type="String" Name="articolo"></asp:Parameter>
      <asp:Parameter Type="Int32" Name="quantita"></asp:Parameter>
      <asp:Parameter Type="String" Name="categoria"></asp:Parameter>
    </InsertParameters>
</asp:AccessDataSource>

Questo codice è sufficiente per permettere la modifica a la cancellazione dei record con il GridView. Se utilizziamo come editor Visual Studio 2005, il tutto si limita a qualche click con il mouse per la selezione della fonte dei dati e della query (è presente un query builder).

Se vogliamo complicarci la vita, potremmo inserire un dropdownlist per filtrare per categoria la query appena creata.
Anche in questo caso non dobbiamo preoccupari di scrivere codice, perché i DataSource sono in grado di prendere eventuali parametri da altri webcontrol:

<asp:AccessDataSource ID="AccessDataSource1" Runat="server" DataFile="~/articoli.mdb"
    DeleteCommand="DELETE FROM [Articoli] WHERE [id] = ?"
    InsertCommand="INSERT INTO [Articoli] ([id], [articolo], [quantita], [categoria]) VALUES (?, ?, ?, ?)"
    SelectCommand="SELECT [id], [articolo], [quantita], [categoria] FROM [Articoli] WHERE ([categoria] = ?) ORDER BY [id]"
    UpdateCommand="UPDATE [Articoli] SET [articolo] = ?, [quantita] = ?, [categoria] = ? WHERE [id] = ?">
    <DeleteParameters>
      <asp:Parameter Type="Int32" Name="id"></asp:Parameter>
    </DeleteParameters>
    <UpdateParameters>
      <asp:Parameter Type="String" Name="articolo"></asp:Parameter>
      <asp:Parameter Type="Int32" Name="quantita"></asp:Parameter>
      <asp:Parameter Type="String" Name="categoria"></asp:Parameter>
      <asp:Parameter Type="Int32" Name="id"></asp:Parameter>
    </UpdateParameters>
    <SelectParameters>
      <asp:ControlParameter Name="categoria" DefaultValue="xxx1" Type="String" ControlID="DropDownList1" PropertyName="SelectedValue"></asp:ControlParameter>
    </SelectParameters>
    <InsertParameters>
      <asp:Parameter Type="Int32" Name="id"></asp:Parameter>
      <asp:Parameter Type="String" Name="articolo"></asp:Parameter>
      <asp:Parameter Type="Int32" Name="quantita"></asp:Parameter>
      <asp:Parameter Type="String" Name="categoria"></asp:Parameter>
    </InsertParameters>
</asp:AccessDataSource>

Da notare la sezione "SelectParameters", in cui viene specificato come sorgente un altro webcontrol e la proprietà "PropertyName" dove è impostato il nome della proprietà da cui ricavare il dato per fare la query.

Per approfondimenti su ASP.NET 2.0 si veda
http://aspdotnet2.aspitalia.com/

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

I più letti di oggi