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
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
