我创建了一个usercontrol
,里面有treeview
。
现在我已经将它放在aspx page
两次,但有一些不同Id
让我们说usercontrolA
和usercontrolB
。
它们都被逐页加载到页面中
现在pre-render event
的{{1}}我希望得到usercontrolA
对象treeview
的对象。
如何实现目标?>
答案 0 :(得分:4)
您需要usercontrolB
的实例才能访问用户控件的treeview
控件。因此,请尝试在某个适当的存储中保留实例,以便在pre-render
事件中访问它。
引入一个属性以将UC类型保存在User-Control
:
public MyUserControl MainUserControl { get; set; }
在父ASPX中,使用usercontrolB
设置属性:
usercontrolA.MainUserControl = usercontrolB;
usercontrolB.MainUserControl = usercontrolB;
现在,您可以使用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")