从同一页面中的另一个用户控件中查找用户控件的控件

时间:2012-12-27 12:45:57

标签: c# asp.net

我创建了一个usercontrol,里面有treeview

现在我已经将它放在aspx page两次,但有一些不同Id让我们说usercontrolAusercontrolB

它们都被逐页加载到页面中 现在pre-render event的{​​{1}}我希望得到usercontrolA对象treeview的对象。

如何实现目标?

6 个答案:

答案 0 :(得分:4)

您需要usercontrolB实例才能访问用户控件的treeview控件。因此,请尝试在某个适当的存储中保留实例,以便在pre-render事件中访问它。

  1. 引入一个属性以将UC类型保存在User-Control

    public MyUserControl MainUserControl { get; set; }
    
  2. 在父ASPX中,使用usercontrolB设置属性:

    usercontrolA.MainUserControl = usercontrolB;
    usercontrolB.MainUserControl = usercontrolB;
    
  3. 现在,您可以使用MainUserControl媒体资源访问TreeView

    MainUserControl.treeView1 ...
    

答案 1 :(得分:2)

此示例用于在此表单的任何控件上查找名为treeview的“usercontrolB”。

            Control[] ctrl = this.Controls.Find("usercontrolB", true);
            if (ctrl != null && ctrl.Length > 0)
            {
                TreeView tv = (TreeView)ctrl[0];
                // do whatever you want with the treeview
            }

答案 2 :(得分:1)

为什么必须在PreRender中访问它?

您需要创建自定义事件:

主页

var uc1 = (UserControlType1)LoadControl("UC1.ascx");
var uc2 = (UserControlType1)LoadControl("UC2.ascx");
uc2.PreRendered += uc2_PreRendered;

public void uc2_PreRendered(object sender, TreeView tv){
    // you can access your treeview from here
}

用户控制B

public delegate void PreRenderDelegate(object sender, TreeView tv);
public event PreRenderDelegate PreRender;

public void OnPreRender(object sender, EventArgs e){
    if(this.Prerendered!=null)
        this.Prerendered(this, aTreeView);
}

答案 3 :(得分:0)

您可以在user-controlA的OnPreRender事件中使用以下代码:

var tree = this.Page.FindControl("uc2").FindControl("treeview1");

注意:“uc2”是ASPX页面中User-ControlB的ID。

或者你可以试试这个:

 var tree = this.Page.LoadControl("UserControlB.ascx").FindControl("treeview1");

答案 4 :(得分:0)

(我只是重新发布my post that helped供他人推荐)

您可以随时使用控件事件更新RadTreeView,方法是将一些值作为属性传递,并再次为您的RadTree(用户控件中的那个)调用数据绑定方法...也就是说您可以传递对象RadTree本身,IMO。

答案 5 :(得分:0)

Var str=This.Page.findControl("UserControlName").FindControl("NameOfTheControlToFind")