2009-12-18 104 views
6

我知道你可以通过在aspx页面上添加它的属性来声明性地将一个事件处理程序分配给一个formview中的子控件(即onclick =“Button_Click”),但是如果我想这样做以编程方式,我将如何去解决它?该控件不会通过页面初始化或加载事件中的FormView.FindControl找到,因此无法在这些阶段中分配。 FormView的DataBound事件可以让你找到控件,但是不合适,因为它只发生一次,然后事件不会总是被绑定,并且它不会被触发。我不是问,因为我无法绕过它,我只是想知道它是如何做到的。以编程方式将事件分配给FormView中的子项

干杯。

+0

我其实很想知道这一点,因为我遇到了一些动态加载的用户控件和绑定到他们的事件的麻烦。 – rossipedia 2009-12-18 17:36:21

+0

添加事件处理标记 – denny 2009-12-18 19:00:03

回答

1

in c#this is done via:
this.btnProcess.Click + = new EventHandler(btnProcess_Click);

+0

我不是在谈论那行代码。我正在讨论基于必须使用FindControl来获取FormView中的控件的代码行 – Matt 2009-12-18 19:03:00

1

你试过PreRender吗?我认为这太迟了,但是很惊讶它不在你的文章中。

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

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

} 

上面的代码片段展示了,我们怎么能一个ItemClick事件添加到FormView控件来处理子控件的事件。现在,您应该映射或拖动新的FormView控件。

相关问题