以编程方式将事件分配给FormView中的Child

时间:2009-12-18 17:14:01

标签: c# asp.net event-handling formview

我意识到您可以通过在aspx页面上添加其属性(即onclick =“Button_Click”)以声明方式将事件处理程序分配给formview中的子控件,但是如果我想以编程方式执行此操作,我将如何进行它?该控件不会通过Page的Init或Load事件中的FormView.FindControl找到,因此无法在这些阶段中分配。 FormView的DataBound事件将允许您查找控件,但是不合适,因为它只发生一次,然后事件不会始终被绑定,并且它不会触发。我不是在问,因为我无法绕过它,我只是想知道如何做到这一点。

干杯。

4 个答案:

答案 0 :(得分:2)

您应该使用FormView的ItemCreated事件。它在创建所有行之后但在FormView绑定到数据之前发生。

Look at this MSDN page for more information

答案 1 :(得分:1)

在c#中,这是通过以下方式完成的:
this.btnProcess.Click + = new EventHandler(btnProcess_Click);

答案 2 :(得分:1)

你试过PreRender吗?我认为为时已晚,但我很惊讶它不在您的帖子中。

我觉得很奇怪你会添加一个你希望立即开火的事件。为什么不在这种情况下调用处理程序或函数。

答案 3 :(得分:1)

也许我错过了什么!您可以使用事件冒泡。但是FormView控件没有处理子控件事件的事件。所以,我们做了一些改变。

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

}

上面的代码片段演示了如何向FormView控件添加ItemClick事件以处理子控件的事件。现在,您应该映射或拖动新的FormView控件。

相关问题