2010-02-02 111 views
3

非常感谢提前。我已经完成了我的尽职调查并进行了2天的研究,但似乎无法将我的想法包括在线教程描述的内容中。ASP.Net用户控制事件冒泡(C#)

情况:铅程序员ups和退出。公司老板知道我在一边做了一些(新手)VB.NET,并要求我在他的Intranet应用程序上的两个自定义用户控件之间连接功能(用C#写的)。回答专家的小考虑 - 我很流利在Visual Studio中...但仍然在学习C#)。

这里是控制一个简单的描述,但希望足以让我们朝着正确的方向:

UserControl_1包含多个了LinkBut​​ton,点击后,应该改变SelectParameter的价值正在使用中UserControl_2一个ObjectDataSource :

<asp:LinkButton ID="OpenBtn1" runat="server" Text="Show Open Requests" /> 
<asp:LinkButton ID="ClosedBtn1" runat="server" Text="Show Closed Requests" /> 

UserControl_2(GridView控件与数据源):

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    SelectMethod="GetDataBy_Status" 
    TypeName="adhoc_TblAdptrs.adhoc_TblAdptr"> 
    <SelectParameters> 
     <asp:Parameter DefaultValue="All" Name="status" Type="String" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

<asp:GridView1 ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" /> 

想我请将新的默认值传递给UserControl_2中的ObjectDataSource的SelectParameter。我期待着来自专业人士的个性化解释!您的帮助非常大,非常感谢!

+3

不要敲木工。这是一项有用的技能,您可以通过它赚钱。 – 2010-02-02 18:37:42

+0

木工很酷! – JonH 2010-02-02 18:41:31

回答

3

我会暴露在UserControl2的属性,将依次设置参数值

public string ParamValue { get; set; } 

protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { 
    if (ParamValue.Length > 0){ 
     e.InputParameters["status"] = ParamValue; 
    } 
} 

此外,在页面创建将设置属性在控制公共方法

public void SetParamValue(string Value){ 
    UserControl_2.ParamValue = Value; 
} 

从这里,在linkbutton点击事件中,您可以使用页面的方法设置公共属性:

void OpenBtn1_Click(Object sender, EventArgs e){ 
    ((YourPageClassHere)this.Page).SetParamValue("Open"); 
    } 

此方法将完成工作,但会将控件与linkbutton耦合到此特定页面。

如果你想删除的连接,那么你可以实现与方法的接口

public interface IParameterValuePage{ 
    public void SetParamValue(string Value) 
} 

然后在你的页面,你会实现它和

控制页面做的代码进行检查
void OpenBtn1_Click(Object sender, EventArgs e){ 
     if (this.Page is IParameterValuePage){ 
      ((IParameterValuePage)this.Page).SetParamValue("Open"); 
     } 
     else{ 
      throw new Exception("Page must implement IParameterValuePage"); 
     } 
    } 
+0

+1。我同意这个答案。再加上一个其他的考虑..我不知道是否两个用户控件可以合并成一个?他们似乎紧紧地联系在一起...... – 2010-02-02 19:11:11

+0

我认为同样的事情,直到我发现在他的网站中的不同地方使用相同的控制,在那里连接链接按钮是没有意义的。 – Daniel 2010-02-02 19:24:28

+0

Russ - 我明白你的建议到目前为止,但是......我不需要一种方式来将UserControl_1中的linkbutton的click事件“冒泡”到页面,这样页面上的一个函数就可以改变参数了吗? (我问这是因为如果UserControl_1用于UserControl_2中的gridview/ObjectDataSource不存在的页面,是不是会抛出错误?) – Daniel 2010-02-02 19:38:43