非常感谢提前。我做了尽职调查并研究了2天,但似乎无法理解在线教程描述的内容。
情况:领导程序员上升和退出。公司老板知道我已经做了一些(新手)VB.NET,并要求我在他的内部网应用程序上用2个自定义用户控件之间连接功能(用C#编写。回答专业人员的小考虑 - 我很流利在Visual Studio中......但仍在学习C#)。
以下是控件的简化说明,但希望足以让我们朝着正确的方向前进:
UserControl_1包含多个链接按钮,单击这些按钮时,应更改UserControl_2中ObjectDataSource正在使用的SelectParameter的值:
<asp:LinkButton ID="OpenBtn1" runat="server" Text="Show Open Requests" />
<asp:LinkButton ID="ClosedBtn1" runat="server" Text="Show Closed Requests" />
UserControl_2(带有DataSource的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。我很期待专业人士的个性化解释!非常感谢您的帮助!
答案 0 :(得分: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");
}
此方法将完成工作,但它会将控件与链接按钮耦合到此特定页面。
如果要删除耦合,则可以使用方法
实现接口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");
}
}