Gestione degli eventi in un Composite Control per ASP.NET 2.0

di Stefano Mostarda, in ASP.NET 2.0, Custom Control,

Quando si costruisce un Composite Control, spesso si ha l'esigenza di dover gestire gli eventi dei controlli direttamente all'interno del contenitore. Per fare questo, invece di aggiungere un delegato per l'evento dei controlli, si possono impostare le proprietà CommandName e CommandArgument di questi e poi fare l'override del metodo OnBubbleEvent per verificare quale sia il controllo che ha scatenato l'evento.

In questo script, c'è una textbox con due bottoni che visualizzano uno l'ora corrente e l'altro l'ora UTC. Prima si imposta la proprietà CommandName di ognuno dei bottoni, poi nel metodo OnBubbleEvent si recupera il CommandName del bottone che ha scatenato l'evento e si decide quale ora visualizzare nel textbox.

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace ASPItalia.com.Web.UI.Controls
{
  public class MyCompositeControl : CompositeControl
  {
    public MyCompositeControl()
    {
    }

    TextBox _textbox;
    Button _UTCDateButton;
    Button _localDateButton;

    protected override void CreateChildControls()
    {
      //pulisce la collezione dei controlli
      Controls.Clear();

      //istanzia ed aggiunge i controlli al contenitore
      _textbox = new TextBox();
      _UTCDateButton = new Button();
      _localDateButton = new Button();
      Controls.Add(_textbox);
      Controls.Add(_UTCDateButton);
      Controls.Add(_localDateButton);

      //imposta il testo e la proprietà CommandName dei bottoni per l'identificazione dell'evento
      _UTCDateButton.Text = "UTC";
      _UTCDateButton.CommandName = "UTC";
      _localDateButton.Text = "Local";
      _localDateButton.CommandName = "Local";
    }

    protected override bool OnBubbleEvent(object source, EventArgs args)
    {
      //indica se l'evento è gestito o meno
      bool handled = false;
      
      //esegue il cast dell'argomento di input a CommandEventArgs 
      CommandEventArgs arg = args as CommandEventArgs;

      if (args != null) {

        //imposta il flag settando l'evento come gestito
        handled = true;

        //imposta il textbox con la data in base al CommandName del bottone premuto
        if (arg.CommandName == "UTC")
          _textbox.Text = DateTime.UtcNow.ToString();
        else
          _textbox.Text = DateTime.Now.ToString();
      }
      //ritorna il flag che identifica se l'evento è stato gestito o meno
      return handled;
    }
  }
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi