Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Parametri custom per i DataSource

Indicare nuove fonti per i parametri
Indicare nuove fonti per i parametri
Link copiato negli appunti

Creare controlli personalizzati e riusabili per le fonti di dati si rivela molto utile, come abbiamo osservato in un articolo precedente. Abbiamo anche illustrato come implementare il supporto per l'utilizzo dei parametri al loro interno.

In questo breve articolo, invece, vedremo come è possibile creare dei parametri custom pronti per soddisfare quelle esigenze che i parametri di default non offrono. Facciamo prima un passo indietro e rivediamo quali sono gli oggetti che abbiamo a disposizione da utilizzare come parametri.

  • ControlParameter - preleva informazioni da una proprietà di un altro controllo presente all'interno della pagina.
  • CookieParameter - preleva informazioni da un cookie tramite una chiave.
  • FormParameter - preleva informazioni da un campo form di una richiesta HTTP.
  • ProfileParameter - preleva informazioni da una delle proprietà del sistema dei profili.
  • QueryStringParameter - preleva informazioni da una querystring tramite la relativa chiave.
  • SessionParameter - preleva informazioni dalla sessione, tramite una chiave.

Come spesso accade però, quello che ci offre il Framework non basta per soddisfare le nostre esigenze e la nostra fantasia, basti pensare infatti che abbiamo la possibilità di prelevare informazioni da tantissime altre fonti come la cache della pagina, il ViewState o archivi fisici come file XML o direttamente i database.

Possiamo quindi provvedere alle varie mancanze noi stessi, estendendo quello che ci viene offerto e implementando i nostri parametri custom.

Estendere il Framework ha i suoi vantaggi: possiamo utilizzare questi parametri personalizzati con qualsiasi oggetto DataSource disponibile, in modo tale da poter usufruire dei controlli già presenti nel Framework ed arricchirne le funzionalità attraverso l'utilizzo di parametri custom.

Nell'esempio che segue, vedremo come creare un parametro che prelevi informazioni dalla cache della pagina.

La creazione di un nuovo parametro è una tecnica abbastanza semplice da imparare; basta infatti creare una classe che erediti dalla classe Parameter (del namespace System.Web.UI.WebControls), classe padre di tutti i parametri di ASP.NET 2, e sovrascrivere il metodo Evaluate.

Inoltre, possiamo definire tutte le proprietà per rendere il nostro parametro il più personalizzabile possibile. Nel nostro caso, si è deciso di implementare la proprietà Key, in modo tale da poter poi specificare la chiave con cui recuperare l'eventuale valore dalla cache.

Listato 1. Una classe per il parametro custom

namespace Peppe.Web.UI.WebControls
{
  public class CacheParameter : Parameter
  {
    public string Key
    {
      get
      {
        object obj = base.ViewState["Key"];

        if (obj == null) return string.Empty;
        return (string)obj;
      }
      set
      {
        if (Key != value)
        {
          base.ViewState["Key"] = value;
          base.OnParameterChanged();
        }
      }
    }

    protected override object Evaluate(HttpContext context, Control control)
    {
      return context.Cache[Key];
    }
  }
}

Come potete vedere lo sviluppo di un parametro custom è una tecnica abbastanza semplice; il fulcro di tutto è il metodo Evaluate(), nel quale va prelevata l'informazione dalla fonte di dati e fatta ritornare al controllo DataSource.

Ora, anche se la classe Parameter non deriva da WebControl questa viene lo stesso trattata come un controllo web vero e proprio da ASP.NET 2.0; proprio perciò il nostro parametro custom deve essere registrato all'interno del web.config per essere utilizzato come tale.

Listato 2. Definizione del nuovo parametro nel web.config

<system.web>
  <compilation debug="false" />
  <pages>
    <controls>
      <add tagPrefix="pep" namespace="Peppe.Web.UI.WebControls" assembly="__code"/>
    </controls>
  </pages>
</system.web>

Una volta completate le suddette operazioni, possiamo utilizzare il nostro parametro all'interno di uno dei DataSource che abbiamo a disposizione (utilizzeremo il controllo FeedDataSource definito nell'articolo precedente, ma potremmo usare uno qualunque tra quelli offerti di default dal .NET Framework).

Listato 3. Utilizzare il parametro custom

<pep:FeedDataSource FeedType="RSS" ID="myFeedDataSource2" runat="server">
  <Parameters>
    <pep:CacheParameter Name="FeedUrl" Key="myFeedUrl" />
  </Parameters>
</pep:FeedDataSource>
<asp:Repeater ID="rep2" runat="server" DataSourceID="myFeedDataSource2">
  <ItemTemplate>
    <a href='<%# Eval("Url") %>' title='<%# Eval("Title") %>'><%# Eval("Title") %></a><br />
  </ItemTemplate>
</asp:Repeater>

In questo caso, per permettere il corretto funzionamento del nostro parametro custom, dobbiamo inserire un valore nella cache della pagina con chiave "myFeedUrl", come descritto dalla dichiarazione del parametro stesso:

Cache["myFeedUrl"] = "http://rss.html.it/articoli.xml";

Conclusioni

In questo articolo, abbiamo visto come creare i nostri parametri personalizzati per filtrare le informazioni prelevate dai controlli DataSource presenti nel Framework e quelli custom creati da noi. Come sempre, il limite per le eventuali implementazioni di nuovi parametri è segnato dalla nostra immaginazione.

Ti consigliamo anche