Supporto desing-time dei controlli ASP.NET

di: Giuseppe Marchi     10 Ottobre 2007

Editor di tipi

Gli editor di tipi sono delle ulteriori finestre che sono create sempre a supporto della finestra delle proprietà, poiché la maggior parte dei tipi personalizzati hanno bisogno di differenti strutture di input per l'inserimento delle informazioni, in quanto semplici caselle di testo o menu a tendina spesso non possono bastare. Un editor di tipo che avrete sicuramente utilizzato molto spesso è l'editor per la creazione del collegamento tra un controllo di tipo Data-Bound e un DataSource; in un'operazione del genere è infatti necessario che l'interfaccia grafica sia completa sia per la scelta della fonte di dati che per la scelta dei singoli campi di binding.

Nota: per la creazione di un editor di tipo custom, bisogna avere una minima conoscenza della classi utilizzate per la creazione di Windows Form, il che esula da tutto il mondo legato ad ASP.NET; nonostante ciò daremo comunque la basi per la costruzione di questo tipo di personalizzazioni.

Come esempio, proviamo a creare un editor per la proprietà Url del nostro controllo PopUpLink. L'editor dovrà semplicemente far visualizzare, in una finestra modale, l'indirizzo della pagina che si intende inserire nel controllo, attraverso un controllo WebBrowser (controllo proprio del namespace System.Windows.Form).

Ogni editor di tipo, eredita dalla classe UITypeEditor. Tale classe obbliga l'override di due metodi:

Metodi da implementare
MetodoDescrizione
EditValueUtilizzato per visualizzare la form di supporto alla proprietà e per la modifica dei valori legati al controllo padre
GetEditStyleUtilizzato per definire lo stile da applicare alla Windows Form di supporto

Questo il codice del nostro editor personalizzato (lo sviluppo della Windows Form verrà saltato in quanto non rientra nell'argomento dell'articolo; il codice è comunque presente nel file da scaricare):

public class PopUpEditor : UITypeEditor
{
  private IWindowsFormsEditorService service = null;

  public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
  {
    if (context != null && provider != null)
    {
      service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
      if(service != null && context.Instance != null)
      {
        // prelevo l'istanza del controllo di riferimento
        PopUpLink control = (PopUpLink)context.Instance;

        // apro la Windows Form
        service.ShowDialog(new PopUpFormEditor(control));
      }
    }
    return value;
  }

  public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
  {
    if(context != null)
    {
      if (context.Instance != null) return UITypeEditorEditStyle.Modal;
    }
    return base.GetEditStyle(context);
  }
}

Una volta creato l'editor e la Windows Form associata, non dobbiamo far altro che legarlo alla proprietà che abbiamo intenzione di modificare attraverso questa finestra di supporto.

[Browsable(true), Category("Appearance"), Description("Link url value.")]
[Editor(typeof(PopUpEditor), typeof(UITypeEditor))]
public string Url
{
  get
  {
    object o = ViewState["Url"];
    return (o == null) ? String.Empty : (string)o;
  }
  set { ViewState["Url"] = value; }
}

Il riusltato è d'avvero di forte impatto.

Conclusioni

Se abbiamo intenzione di distribuire le nostre librerie di controlli web, non è assolutamente pensabile non passare per la personalizzazione del supporto di questi ultimi per quanto riguarda la fase di desgin/progettazione. Un primo aiuto lo danno già gli attributi di progettazione, che ci danno la possibilità, in maniera del tutto dichiarativa, di modificare il comportamento dei nostri controlli in tale fase.

Abbiamo visto anche però, che per rendere i controlli il più malleabili possibile è necessario sviluppare un supporto visuale più complesso, avvalendosi di classi extra per la creazione di control designers, editor di tipi e convertitori di tipi, tutti strumenti che aiutano lo sviluppatore a modificare velocemente e con facilità il comportamento dei nostri controlli web.

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto