2009-12-18 16 views
6

Mi rendo conto che è possibile assegnare in modo dichiarativo un gestore di eventi a un controllo figlio all'interno di una formview aggiungendo il relativo attributo nella pagina aspx (ad es. Onclick = "Button_Click"), ma se volessi farlo a livello di codice, come potrei farlo? Questo controllo non verrà trovato tramite FormView.FindControl negli eventi Init o Load della pagina, quindi non può essere assegnato in tali fasi. L'evento DataBound di FormView ti permetterà di trovare il controllo, ma è inappropriato, dal momento che ciò accade una sola volta, e quindi l'evento non sarà sempre vincolato e non sparerà. Non ti sto chiedendo perché non posso aggirarlo, volevo solo sapere come potrebbe essere fatto.Assegnare programmaticamente l'evento a Child Inside FormView

Cheers.

+0

In realtà mi piacerebbe saperlo, poiché avevo problemi con alcuni controlli utente dinamici caricati e vincolati ai loro eventi. – rossipedia

+0

Aggiunto tag di gestione eventi – denny

risposta

1

in C# questo si ottiene tramite:
this.btnProcess.Click + = new EventHandler (btnProcess_Click);

+0

Non sto parlando di quella riga di codice. Sto parlando di dove mettere quella riga di codice in base al dover utilizzare FindControl per afferrare il controllo all'interno di FormView – Matt

1

Hai provato PreRender? Penso che sia troppo tardi, ma sono sorpreso che non fosse nel tuo post.

Trovo strano che tu aggiunga un evento che ti aspetti di sparare immediatamente. Perché non basta chiamare il gestore o la funzione in quel caso.

1

forse mi manca qualcosa! Puoi invece utilizzare il bubbling degli eventi. Ma il controllo FormView non ha un evento per gestire gli eventi dei controlli figlio. Quindi, abbiamo alcuni cambiamenti.

[System.Web.UI.ToolboxData("<{0}:FormView runat=\"server\" />")] 
public class FormView : System.Web.UI.WebControls.FormView 
{ 

    private static readonly object _itemClickEvent = new object(); 

    [System.ComponentModel.Category("Action")] 
    public event EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs> ItemClick 
    { 
     add { base.Events.AddHandler(_itemClickEvent, value); } 
     remove { base.Events.RemoveHandler(_itemClickEvent, value); } 
    } 

    protected virtual void OnItemClick(System.Web.UI.WebControls.FormViewCommandEventArgs e) 
    { 
     EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs> handler = base.Events[_itemClickEvent] as EventHandler<System.Web.UI.WebControls.FormViewCommandEventArgs>; 
     if (handler != null) handler(this, e); 
    } 

    protected override bool OnBubbleEvent(object source, EventArgs e) 
    { 
     this.OnItemClick((System.Web.UI.WebControls.FormViewCommandEventArgs)e); 
     return base.OnBubbleEvent(source, e); 
    } 

} 

Il codice di cui sopra Snippet dimostrato, come si può aggiungere un evento ItemClick al controllo FormView per gestire gli eventi dei controlli figlio. Ora, è necessario mappare o trascinare il nuovo controllo FormView.