2010-07-02 68 views
1

稱爲所在的當前說aspx頁面中有一個名爲theDataGrid一個DataGrid控件和一個名爲theUserControltheUserControl用戶控件,以獲取綁定我的數據的方式有一個按鈕命名爲theUcButton必須有在正確的時間

是的,我知道,非常富有想象力的命名。

該ucButton被點擊,會話變量被改變。

此會話變量是DataGrid的數據源的選擇參數。

但是,由於東西叫在頁面生命週期中的順序,當theUcButton被點擊併產生回傳, 所在的當前控件之前theUserControl復位會話變量,加載數據網格直到下一次回發才顯示新數據。

如何獲得我想要的工作?

我正在使用3.5,如果重要。

+0

的代碼有點走一段很長的路要走。發佈你的代碼,所以我們可以看到你在哪裏做什麼。 – Oded 2010-07-02 15:16:14

+0

有很多代碼。我試圖清楚地解釋我的問題,以免發佈代碼。 – 2010-07-02 15:26:46

回答

1

以下是您的用戶控件引發事件的示例代碼。

public partial class WebUserControl : System.Web.UI.UserControl{ 
public event EventHandler Updated; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //do some work to this user control 

    //raise the Updated event 
    if (Updated != null) 
     Updated(sender, e); 
}} 

然後從你的.aspx頁面中,你會處理,就像往常一樣

<uc1:WebUserControl ID="WebUserControl1" runat="server" OnUpdated="WebUserControl1_Updated" /> 

代碼背後的新事件:

protected void WebUserControl1_Updated(object sender, EventArgs e) 
{ 
    //handle the user control event 
} 
1

您可以將事件聲明爲UserControl類的成員,將其引發並在Page類中處理它。

您還可以使用其他事件(如Page.PreRender())在用戶控件的事件之後提取事物。

+0

我一直試圖讓這個工作沒有成功。你能推薦一個Dummies事件鏈接嗎? – 2010-07-02 15:18:12

+0

不是真的......我只是開始使用谷歌搜索。一個簡單的方法是在頁面上創建綁定網格的公共方法。然後UserControl可以執行this.Page.MyBindingFunction();我是一個VB的人,所以語法可能關閉,你可能不得不把這個頁面投到正確的類,但這應該是它的要點。這樣可以使頁面和控件更緊密地耦合,這並不是很好,但我認爲它比使用prerender事件更清晰。 – joelt 2010-07-02 15:47:06

+0

將無法​​使用。呼叫頁面。MyBindingFunction將需要新建一個頁面實例,其中所有控件都爲空。 – 2010-07-02 15:58:25

0

最簡單的方法是延遲數據綁定直到生命週期的後期,比如joelt建議的Page.PreRender事件。如果你做了綁定,那麼你應該有會話變量。