2009-10-01 30 views
1

我在.aspx代碼隱藏之外的自定義類中創建了一個動態按鈕。自定義類創建一個Table對象並在該表中生成一列Button。一旦生成,表被加載到一個佔位符控件。除了這個問題,一切都運行良好:asp c#自定義類中的動態按鈕事件

如何以編程方式爲自定義類中的「點擊」事件分配Button對象?

MyButton.Click += new EventHandler(MyButtonClick); 

這會導致:'名稱'MyButtonClick'在當前上下文中不存在'錯誤。

我知道它在當前上下文中不存在,但是一旦呈現aspx頁面,代碼隱藏將包含一個處理'MyButtonClick'的方法。我不知道如何將Click事件方法名稱存儲在自定義類的Button對象中,並將其傳遞給要呈現的aspx代碼隱藏。

+0

通過自定義類你是指自定義控件嗎? – JustLoren 2009-10-01 18:10:56

+0

不,只是像這樣的自定義類: 公共類DataSetTableRenderer {} 與屬性,方法等... – Paulj 2009-10-01 18:54:49

回答

4

您必須在自定義控件中定義一個事件。點擊按鈕點擊事件以便您的.aspx可以處理它。

編輯:相同的原則適用於自定義類。

器代碼背後:

public delegate void ButtonEventHandler(); 
public event ButtonEventHandler ButtonEvent; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ButtonEvent(); 
} 

.ASPX代碼背後:

protected override void OnInit(System.EventArgs e) 
{    
    control1.ButtonEvent+= 
       new Control1.ButtonEventHandler (whatever_ButtonEvent); 

} 

protected void whatever_ButtonEvent() 
{ 
    //do something 
} 
1

讓我們這個概念,並將其應用到具有一個文本框和兩個按鈕的用戶控件。用戶控件放置在GridView中。當我的代碼運行時,我的事件處理程序方法中的方法始終爲空。我認爲必須做的事實是,一個按鈕位於gridview中的用戶控件中。

這是我的用戶控制代碼。

公共部分類User_Controls_GridViewFilter:System.Web.UI.UserControl {

public event EventHandler UserControlButtonClicked; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     renderPage(); 
    } 
} 



private void OnUserControlButtonClick() 
{ 
    if (UserControlButtonClicked != null) 
    { 
     UserControlButtonClicked(); 
    } 
} 

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    OnUserControlButtonClick(); 
} 

protected void btnReset_Click(object sender, EventArgs e) 
{ 
    OnUserControlButtonClick(); 
} 

}

我註冊aspx頁面上的控件。

 ((User_Controls_GridViewFilter)gvMapLayer.HeaderRow.FindControl("FilterBox1")).UserControlButtonClicked 
      += new ButtonEventHandler(User_Controls_GridViewFilter_UserControlButtonClicked);