我意识到您可以通过在aspx页面上添加其属性(即onclick =“Button_Click”)以声明方式将事件处理程序分配给formview中的子控件,但是如果我想以编程方式执行此操作,我将如何进行它?该控件不会通过Page的Init或Load事件中的FormView.FindControl找到,因此无法在这些阶段中分配。 FormView的DataBound事件将允许您查找控件,但是不合适,因为它只发生一次,然后事件不会始终被绑定,并且它不会触发。我不是在问,因为我无法绕过它,我只是想知道如何做到这一点。
干杯。
答案 0 :(得分:2)
您应该使用FormView的ItemCreated事件。它在创建所有行之后但在FormView绑定到数据之前发生。
答案 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控件。