Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式将事件分配给FormView中的子级_C#_Asp.net_Event Handling_Formview - Fatal编程技术网

C# 以编程方式将事件分配给FormView中的子级

C# 以编程方式将事件分配给FormView中的子级,c#,asp.net,event-handling,formview,C#,Asp.net,Event Handling,Formview,我意识到,您可以通过在aspx页面上添加子控件的属性(即onclick=“Button\u Click”),以声明方式将事件处理程序分配给formview中的子控件,但是如果我想以编程方式执行此操作,我该如何做呢?无法通过页面的Init或Load事件中的FormView.FindControl找到该控件,因此无法在这些阶段分配该控件。FormView的DataBound事件将允许您查找控件,但这是不合适的,因为这种情况只发生一次,然后事件不会始终绑定,也不会触发。我不是问,因为我无法回避,我只是

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

干杯。

在c#这是通过:

this.btnProcess.Click+=新事件处理程序(btnProcess\u Click)

您尝试过预渲染吗?我认为这太晚了,但我很惊讶你的帖子里没有


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

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


也许我错过了什么!您可以改用事件冒泡。但是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);
    }

}
[System.Web.UI.ToolboxData(“”)
公共类FormView:System.Web.UI.WebControl.FormView
{
私有静态只读对象_itemClickEvent=new object();
[System.ComponentModel.Category(“Action”)]
公共事件事件处理程序项单击
{
添加{base.Events.AddHandler(_itemClickEvent,value);}
remove{base.Events.RemoveHandler(_itemClickEvent,value);}
}
受保护的虚拟磁盘单击(System.Web.UI.WebControl.FormViewCommandEventArgs e)
{
EventHandler=base.Events[\u itemClickEvent]作为EventHandler;
if(handler!=null)handler(this,e);
}
受保护的重写bool OnBubbleEvent(对象源,事件参数e)
{
this.OnItemClick((System.Web.UI.WebControls.FormViewCommandEventArgs)e);
返回基.OnBubbleEvent(源,e);
}
}

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

实际上我很想知道这一点,因为我在一些动态加载的用户控件和绑定到它们的事件时遇到了问题。添加了事件处理标记我不是在说这一行代码。我说的是在必须使用FindControl在FormView中获取控件的情况下,将这行代码放在何处