3 pagine in totale: <<Indietro 1 2 [3]
Sovrascriviamo GetViewNames per indicargli il nome della vista e GetView per restituirgliela. Usiamo una nostra implementazione di DataSourceView di nome DirectoryDataSourceView.
protected override System.Collections.ICollection GetViewNames()
{
return new string[] { "DefaultView" };
}
protected override DataSourceView GetView(string viewName)
{
return new DirectoryDataSourceView(this, viewName);
}
A questo punto creiamo la classe DirectoryDataSourceView e tramite le relative proprietà indichiamo che può cancellare e restituire il numero totale delle righe, in questo caso i file.
internal class DirectoryDataSourceView : DataSourceView
{
private DirectoryDataSource owner;
public DirectoryDataSourceView(DirectoryDataSource owner, string viewName) : base(owner, viewName)
{
this.owner = owner;
}
public override bool CanDelete
{
get { return true; }
}
public override bool CanRetrieveTotalRowCount
{
get { return true; }
}
}
Ora non ci resta che implementare il metodo di selezione e di cancellazione. Per farlo sovrascrivamo ExecuteSelect e ExecuteDelete.
protected override System.Collections.IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
{
if (this.owner.Directory.Length == 0)
throw new InvalidOperationException("You must specify Directory property");
// Controllo che la directory esista
DirectoryInfo directory = new DirectoryInfo(this.owner.Directory);
if (!directory.Exists)
throw new InvalidOperationException(String.Format("Directory {0} does not exists", directory.FullName));
// Aggiungo il controllo della richiesta del numero totale di righe
arguments.AddSupportedCapabilities(DataSourceCapabilities.RetrieveTotalRowCount);
arguments.RaiseUnsupportedCapabilitiesError(this);
// Recupero la lista di files
FileInfo[] files = directory.GetFiles();
// Imposto il numero totale
arguments.TotalRowCount = files.Length;
return files;
}
protected override int ExecuteDelete(System.Collections.IDictionary keys, System.Collections.IDictionary oldValues)
{
// Recupero il nome completo al file
string fullName = keys["FullName"] as string;
if (fullName == null)
throw new InvalidOperationException("Delete parameters must include FullName key");
// Cancello il file
File.Delete(fullName);
return 1;
}
Il codice è ben commentato e abbastanza semplice. DirectoryInfo è una classe del namespace System.IO che permette di recuperare informazioni sulle directory. Chiamando il metodo GetFiles, si ottiene la lista dei file contenuti nella cartella. Poiché arguments è un argomento passato da chi utilizza il DataSource e può includere alcune opzioni come l'ordinamento e il filtro, possiamo chiamare il metodo RaiseUnsupportedCapabilitiesError dopo aver specificato che supportiamo il RetrieveTotalRowCount. Tale metodo controlla che arguments non richieda capacità non supportate; in caso contrario, viene generata un eccezione.
L'utilizzo della classe è simile agli altri DataSource tranne per il fatto che è necessario registrare il controllo all'interno della pagina ASPX in cui viene utilizzato con la direttiva @Register.
<%@ Register TagPrefix="ASPItalia" Namespace="ASPItalia.com.DataSources" %>
<ASPItalia:DirectoryDataSource ID="directorySource" runat="server" Directory="....." />
<asp:GridView runat="server" DataKeyNames="FullName" DataSourceID="directorySource" />
Nell'articolo viene volutamente omessa la parte relativa alla formattazione, in ogni caso il risultato finale è qualcosa di simile a quanto mostrato nella figura di seguito.
Conclusioni
Come abbiamo visto nell'articolo, questo nuovo approccio introdotto da ASP.NET 2.0 facilita moltissimo la creazione di pagine che mostrano dati e ne uniforma la tecnica sia di caricamento che di binding. Il consiglio è quello di evitare l'uso di SqlDataSource e AccessDataSource a favore di ObjectDataSource, utilizzando come sorgente una classe business che accede ai dati, applica delle regole e separa lo strato di presentazione da quello dei dati.
Tutti gli articoli dello speciale su ASP.NET 2.0
- ASP.NET 2.0: Visual Web Developer, architettura e nuove funzionalità di Daniele Bochicchio
- Controlli DataSource in ASP.NET 2.0 di Cristian Civera
- Master Pages, temi e controlli standard in ASP.NET 2.0 di Riccardo Golia
- Membership e Roles API: autenticazione, autorizzazione e gestione dei ruoli con ASP.NET 2.0 di Andrea Zani
- I meccanismi di caching in ASP.NET 2.0 di Stefano Mostarda
3 pagine in totale: <<Indietro 1 2 [3]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità
Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!