两个WebUserControl之间传值

  两个WebUserControl之间传值,网上的代码有,直接从UserControl1中定位到UserControl2的写法,偶合性很强,感觉不太好,于是提供另外的写法。

  用一个容器Container.aspx来放两个WebUserControl,分别是UC1和UC2。现在假设要从UC1的一个事件触发,把UC1中的一个值传到UC2中。

1.新增一个Class,代码如下:

 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;


// delegate要寫在共用class中,這樣的話,才可以讓PegatronEvent在不同的頁面都引用到。
public   delegate   void  TreeViewEventHandler( object  sender, PegatronEvent e);
public   class  PegatronEvent : EventArgs
{
    
// 構造函數
     public  PegatronEvent()
    {
    }

    
// 聲明變數
     public   string  PegatronDeptId;

}

 

 

 

2.UC1中写入事件

 

    //給這個usercontrol加一個event
    public event TreeViewEventHandler DeptInfoHandler;

    
//TreeView的事件,当然用其他事件都OK。
    protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        PegatronEvent DeptEvent 
= new PegatronEvent();
        DeptEvent.PegatronDeptId 
= “我来传东西”;
        
//以下的事件裏面的參數是一定要寫的,sender可以是某個控件的id,也可以是整個頁面(this);
        
//DeptEvent也一定要,而且類型一定要是PegatronEvent,因為在App_Code/PegatronEvent.cs已經定義了。
        DeptInfoHandler(this, DeptEvent);
    }

 

 

3.在放两个Usercontrol的页面Container.aspx中加入代码:

*这是整个过程的最关键点,相当于在两个UserControl之间加一个桥梁。

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

public   partial   class  UI_DepartContainer : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        UC1.DeptInfoHandler 
+=   new  TreeViewEventHandler(UC1_DeptInfoHandler);
    }


    
public   void  UC1_DeptInfoHandler( object  sender, PegatronEvent e)
    {
        
// 取得UserControl的TreeView返回的部門代碼
        UC2.deptid  =  e.PegatronDeptId.ToString();
    }
}

 

4.在UC2中获得值,不多说了,代码如下:

 

     private   string  _deptid;

    
public   string  deptid
    {
        
get  {  return  _deptid; }
        
set  
        { 
            _deptid 
=  value;
        }
    }

 

 

你可能感兴趣的:(user)