2010-07-02 73 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事件。如果你做了绑定,那么你应该有会话变量。