2009-12-18 10 views
6

Me doy cuenta de que puede asignar declarativamente un controlador de eventos a un control secundario dentro de una vista de formulario agregando su atributo en la página aspx (es decir, onclick = "Button_Click"), pero si quería hacerlo programáticamente, ¿cómo lo haré? Ese control no se encontrará a través de FormView.FindControl en Init de la página o Cargar eventos, por lo que no se puede asignar en esas etapas. El evento DataBound de FormView le permitirá encontrar el control, pero es inapropiado, ya que eso solo ocurre una vez, y luego el evento no siempre estará vinculado, y no se disparará. No pregunto porque no puedo evitarlo, solo quería saber cómo se podría hacer.Asignar evento programáticamente a Child Inside FormView

Saludos.

+0

De hecho, me encantaría saber esto, ya que tenía problemas con algunos controles de usuario cargados dinámicamente y vinculantes para sus eventos. – rossipedia

+0

Etiqueta adicional de manejo de eventos – denny

Respuesta

1

en C# Esto se realiza a través de:
this.btnProcess.Click + = new EventHandler (btnProcess_Click);

+0

No estoy hablando de esa línea de código. Estoy hablando de dónde poner esa línea de código basado en tener que usar FindControl para tomar el control dentro de FormView – Matt

1

¿Has probado PreRender? Creo que es demasiado tarde, pero me sorprende que no haya aparecido en su publicación.

Me parece extraño que agregue un evento que espera disparar inmediatamente. ¿Por qué no simplemente llamar al controlador o a la función en ese caso?

1

Tal vez me falta algo! Puede usar el evento de burbujeo en su lugar. Pero el control FormView no tiene un evento para manejar los eventos de los controles secundarios. Entonces, tenemos algunos cambios.

[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); 
    } 

} 

El fragmento de código anterior demuestra, cómo podemos añadir un evento ItemClick al control FormView para controlar los eventos de los controles secundarios. Ahora, debe asignar o arrastrar el nuevo control FormView en su lugar.