Domanda

Nel controllo utente di mio figlio ho una visualizzazione griglia con un gestore eventi OnRowCommand che viene eseguito quando si fa clic sul pulsante Modifica. Voglio impostare la visibilità di un controllo segnaposto ASP.NET nel genitore su true quando si fa clic sul pulsante Modifica nel controllo figlio.

Quale sarebbe il modo migliore per svolgere questo compito?

Aggiornamento:
Dopo un po 'più di ricerca su Internet, creo un Eventhandler di evento pubblico nel mio controllo figlio e ritoccio l'evento quando l'evento OnRowCommand è stato generato. Nel mio evento page_load del mio controllo genitore, ho mappato l'evento di controllo utente figlio su un evento privato nel mio controllo genitore.

Codice sorgente di controllo figlio:

public event EventHandler MyEvent;

protected void MyGridView_OnRowCommand(object sender, GridViewCommandEventsArgs e)
{
    if(MyEvent != null)
        MyEvent(sender, e);
}

Codice sorgente controllo genitori:

protected void Page_Load(object sender, EventArgs e)
{
    MyChildControl.MyEvent += new EventHandler(this.MyLocalEvent);
}

private void MyLocalEvent(object sender, EventArgs e)
{
    MyPlaceHolder.Visible = true;
    MyUpdatePanel.Update();
}
È stato utile?

Soluzione

Esistono due metodi oltre a gorgogliare l'evento che vale la pena considerare:

a. Crea un nuovo evento nel controllo utente figlio. Ascolta questo evento nel controllo parent. Attiva questo evento nel controllo figlio.

b. Ascolta l'evento gridview OnRowCommand nel controllo parent.

L'approccio a è superiore perché c'è meno astrazione che perde attraverso. B è veloce e sporco, ma se si tratta di un controllo utente monouso, non avrà un impatto negativo.

La creazione di eventi è abbastanza semplice, molti programmi includono modelli per eventi, il che significa che l'unica cosa che scrivi è il nome dell'evento (ad esempio Resharper).

Altri suggerimenti

Al di sopra della mia testa vorrei creare un nuovo evento all'interno del controllo utente figlio che si spegnerebbe quando OnRowCommand spara, o usare OnBubbleEvent - Non ricordo il nome esatto ma è qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top