Controlli DataSource in ASP.NET 2.0

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.

Figura 2

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

3 pagine in totale: <<Indietro 1 2 [3]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC