同一页面一个用户控件如何给另一个用户控件中的控件赋值
"A用户控件有一个textbx
B用户控件有若干Checkbox
我要在B中选中若干 点击保存
然后把checkbox的值赋给A中的Textbox"
问题来自论坛。
解决此问题,可以首先分析三者的职责,A用户控件,B用户控件以及B用户件的铵钮;如果更细一点来分析,A用户控件里的TextBox控件,此Textbox需要赋值,值从哪里来,它不用知道也无需知道。B用户控件里也有一个CheckBoxList控件,它只有数据,用户选择的值,将给谁,它也不知道,管不了。还有一个B用户控件的铵钮,铵钮将产生Click事件,它只管保存数据,把CheckBoxList选择的值,保存至TextBox。
OK, 由于CheckBoxList和铵钮是同在一个用户控件内,它们之间的关系没有什么问题,可以直接访问。现在关键是怎样在B用户控件,访问到A用户控件的TextBox?
可以这样想。由于A用户控件与B用户控件同拉放在aspx页面,这样它们就是在同一个容器中,可以直接访问。因此,可以创建一个接口,找到A用户控件的函数。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; /// <summary> /// Summary description for IUserControlable /// </summary> namespace Insus.NET { public interface IUserControlable { UserControl uc(); } }
然后是.aspx.cs页实现刚才创建好的接口:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Insus.NET; public partial class _Default : System.Web.UI.Page,IUserControlable { protected void Page_Load(object sender, EventArgs e) { } public UserControl uc() { return this.UcA1; } }
只要.aspx.cs实现了接口,那我们就可以把它.aspx.cs转为接口类型。
IUserControlable uca = (IUserControlable)this.Page;
Ok,现在要考虑到的是TextBox,怎样给它赋值的问题。它只知道需要一个值,值从哪里来,它不管。因此,我们可以创建一个接口,接口有一个方法,这个方法带一个参数,这个参数就TextBox将得到的值。
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for ISetValueable /// </summary> namespace Insus.NET { public interface ISetValueable { void SetValueForTextBoxControl(string value); } }
由于TextBox控件在A用户控件内,因此A用户控件实现刚才创建的ISetValueable接口。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Insus.NET; public partial class UcA : System.Web.UI.UserControl ,ISetValueable { protected void Page_Load(object sender, EventArgs e) { } public void SetValueForTextBoxControl(string value) { this.TextBox1.Text = value; } }
由于A用户控件实现了ISetValueable接口,因此也可以把A用户控件转为这个接口类型。
ISetValueable textbox = (ISetValueable)uca.uc();
我们来看看动画演示:
演示程序:
http://download.cnblogs.com/insus/ASPDOTNET/uc_access_uc.rar