zoukankan      html  css  js  c++  java
  • 同一页面一个用户控件如何给另一个用户控件中的控件赋值

    "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用户控件的函数。

    IUserControlable
    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页实现刚才创建好的接口:

    View Code
    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转为接口类型。

    View Code
     IUserControlable uca = (IUserControlable)this.Page;


    Ok,现在要考虑到的是TextBox,怎样给它赋值的问题。它只知道需要一个值,值从哪里来,它不管。因此,我们可以创建一个接口,接口有一个方法,这个方法带一个参数,这个参数就TextBox将得到的值。

    ISetValueable
    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接口。

    View Code
    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用户控件转为这个接口类型。

    View Code
    ISetValueable textbox = (ISetValueable)uca.uc();


    我们来看看动画演示:

    演示程序:

     http://download.cnblogs.com/insus/ASPDOTNET/uc_access_uc.rar

      

  • 相关阅读:
    简单的验证码;在一个数组中随即打印出4个不重复的字母
    数据类型
    java语法基础
    mac 开机运行脚本
    【mac】 搭建java环境
    mac 复制文件到NTFS格式的移动硬盘
    JAVA学习日报 8.19
    JAVA学习日报 8.20
    (VI)事务:Spring 事务管理
    (VI)事务:Spring 事务细节
  • 原文地址:https://www.cnblogs.com/insus/p/2943808.html
Copyright © 2011-2022 走看看