Nello script #670 è stato trattato l'argomento DataSource in ASP.NET 2.0, che non sono altro che controlli da inserire direttamente nella pagina per accedere ad una fonte dati e per il popolamento di web control come il GridView. In questo breve script sarà trattato l'ObjectDataSource, che è un DataSource per l'accesso ai dati a classi di tipo business.
L'ObjectDataSource ha tra le sue proprietà le seguenti indispensabili per il popolamento di un web control con questo tipo di DataSource:
- TypeName
- SelectMethod
Nella prima proprietà dovremo inserire il nome della classe business utilizzata, in SelectMethod la funzione che restituisce i dati. Questa funzione dovrà restituire un oggetto che esponga l'interfaccia IEnumerable (come DataTable, DataView o DataSet).
Per l'esempio ho creato una classe semplice di nome Articolo che espone di proprietà Codice e Descrizione per la definizione di un ipotetico articolo:
public class Articolo
{
private int _codice;
private string _descrizione;
public int Codice
{
get { return _codice; }
set { _codice = value; }
}
public string Descrizione
{
get { return _descrizione; }
set { _descrizione = value; }
}
public Articolo(int codice,string descrizione)
{
_codice = codice; _descrizione = descrizione;
}
}Per memorizzare una lista di articoli ho creato una classe ereditandola dalla classe Collection<>, in cui definisco di default il tipo di oggetto che è possibile memorizzare (in questo caso, Articolo):
public class myCollection : System.Collections.ObjectModel.Collection<Articolo>
{
public System.Collections.Generic.IList<Articolo> Lista()
{
return base.Items;
}
}La funzione Lista() resituisce la lista di tutti gli articoli memorizzati in questa classe e che sarà richiamata dall'ObjectDataSource.
Prima di passare alla costruzione dell'esempio vero e proprio, alcune note sul funzionamento dell'ObjectDataSource. Una volta richiesta la pagina contenente questo oggetto, al momento di richiamare la funzione memorizzata in SelectMethod il DataSource istanzia internamente una nuova classe con il nome preso dalla proprietà TypeName, richiamandone il nome della funzione.
Questo approccio ha la limitazione di dover creare e popolare i dati nella classe business al momento del richiamo della funzione SelectMethod.
La soluzione più semplice è poter passare in modo quasi diretto l'istanza della classe business interessata senza altri artifizi e trucchi vari. Questo è possibile grazie all'evento "OnObjectCreating". Ecco un esempio completo di una pagina che popola la classe business e che mostra i dati con un ObjectDataSource in un GridView:
<script runat="server" Language="C#">
myCollection az_collection = null;
void Page_Load()
{
myCollection coll = new myCollection();
coll.Add(new Articolo(1, "a1"));
coll.Add(new Articolo(2, "b2"));
coll.Add(new Articolo(3, "c3"));
coll.Add(new Articolo(4, "d4"));
az_collection = coll;
}
protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = az_collection;
}
</script>
<form id="form1" runat="server">
<div>
<asp:ObjectDataSource
ID="ObjectDataSource1"
runat="server"
SelectMethod="Lista"
TypeName="myCollection"
OnObjectCreating="ObjectDataSource1_ObjectCreating" />
<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" />
</div>
</form>Nell'evento Page_Load viene creata una nuova istanza della classe myCollection e vengono inseriti dei dati fittizi. L'istanza di questa classe viene memorizzata nell'oggetto az_collection, visibile in tutta la pagina. Quando l'ObjectDataSource popola il GridView richiamerà l'evento OnObjectCreating e in esso verrà restituita l'istanza prima memorizzata.
- Un pò di pratica con VirtualPathProvider
- #923 - Caricare dinamicamente un HttpModule
- Membership API per SQL Server anche senza dbo
- #920 - Utilizzare HttpModule in modalità asincrona
- #928 - Proteggere il ViewState di ASP.NET criptandolo
- #926 - Autenticazione con Membership API e selezione del dominio per Active Directory
- #916 - Utilizzare il ControlState di ASP.NET 2.0
- Disponibile parte del codice sorgente del Framework
- #950 - Il supporto al pulsante back del browser con ASP.NET AJAX 3.5 SP 1
- Multi-threading: migliorare la performance delle applicazioni web
- #946 - Attributi per il supprto a design time di custom control con ASP.NET
- #922 - Utilizzare il metodo Page.SetFocus per impostare il focus all'interno della form
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Stampa
Snippet
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Ciao Andrea,ho letto l'articolo e quando dici "Questo approccio ha la limitazione di dover creare e popolare i dati nella classe business al momento ...
Continua »»» | Rispondi »»»