Tecniche di scambio dati tra user control

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

Utilizzo degli Eventi

La soluzione basata sui delegate è sicuramente molto valida e potente, ma mi è parsa un po' lenta da implementre a causa dei vari step da completare per farla funzionare e della complessità propria dei delegate. Mi è allora ventuo in mente di utilizzare gli eventi per snellire questi step e per renderla più semplice se non altro in fase di utilizzo e di un'eventuale futura estendibilità.

Scegliendo la soluzione basata sugli eventi occorre per prima cosa definire un evento nello user control:

public event ClienteCambiatoEventHandler EvClienteCambiato;

Definire un delegto da richiamre a fronte dell'evento definito nello step 1:

public delegate void ClienteCambiatoEventHandler(
  object source,
  ClienteCambiatoEventArgs e
);

Creare un argomento personalizzato da passare al delegato creato allo step 2

public class ClienteCambiatoEventArgs : EventArgs {
  public int CodCliente;
  public string DescCliente;

  public ClienteCambiatoEventArgs(int codCliente, string descCliente){
   this.CodCliente = codCliente;
   this.DescCliente = descCliente;
  }
}

Legare nella pagina (ad esempio in OnInit o in Page_Load) all'evento dello user control, evento creato allo step 1, un'istanza del delegato creato allo step 2; questo evento verrà generato nello step 6:

this.ClientiEvent1.EvClienteCambiato +=
  new ClienteCambiatoEventHandler(this.Ottieni_Cliente_Cambiato_3);

Scrivere nella pagina un metodo coerente con il delegato definito nello step 2 e istanziato nello step 4:

private void Ottieni_Cliente_Cambiato_3( object sender, ClienteCambiatoEventArgs e ){
  ViewState["CodCliente"] = e.CodCliente;
  ViewState["DescCliente"] = e.DescCliente;
}

Creare sull'evento OnSelectedIndexChanged della combo presente nello user control un' istanza del delegato creato allo step 2 e generare l'evento definito allo step 1:

protected void Cambio_Cliente(object sender, System.EventArgs e){
  if( EvClienteCambiato != null ){
   ClienteCambiatoEventArgs args =
    new ClienteCambiatoEventArgs( Int32.Parse(ddlClienti.SelectedItem.Value), ddlClienti.SelectedItem.Text );
  EvClienteCambiato( this, args );
  }
}

Conclusioni

Quale delle tre soluzioni sia la migliore... lo lascio giudicare a voi! Dal mio punto di vista la soluzione basata sulle interfacce è sicuramente la più rapida da sviluppare, ma ritengo abbia il difetto di essere legata al contesto in cui lo user control si viene a trovare, a causa del legame con la pagina che lo ospita. Ritengo che lo user control debba essere il più possibile un oggetto autosufficiente in grado di funzionare autonomamente.

Le altre due soluzioni infatti instaurano il rapporto tra user control e pagina a partire dalla pagina, pagina che chiama una proprietà in un caso, un evento nell'altro, del nostro user control svincolando qest'ulimo dal contesto in cui si viene a trovare.

Nel primo caso è il figlio che "riconosce" il padre, negli altri due è il contrario: personalmente ritengo preferibile questa seconda soluzione.

Approfondimenti

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

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