2009-12-18 88 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控件。

相關問題