同一頁面一個用戶控件如何給另一個用戶控件中的控件賦值


"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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM