Перепривязать RadTreeView из другого пользовательского элемента управления
У меня есть контроль пользователя GrandParent top.asxc. Внутри у меня есть контроль RadSplitter, который делит страницу на 2 раздела. В левой части я загружаю элемент управления Left.ascx, внутри которого есть radTreeView, а справа - right.ascx. На элементе управления right.ascx у меня есть кнопка, и когда я щелкаю по ней, я хочу привязать Databind к элементу управления radTreeView, который находится на элементе управления left.ascx. Это способ сделать это?
1 ответ
Вам нужно передать событие из right.ascx UserControl
на top.ascx UserControl
, Тогда top.ascx UserControl
вызовет нужное вам событие, так как в top.ascx есть экземпляр left.ascx. Вот как...
В файле right.ascx.cs:
public event EventHandler RightButton_Clicked;
protected void RightButton_Click(object sender, EventArgs e)
{
EventHandler handler = RightButton_Clicked;
if (handler != null)
{
handler(this, new EventArgs());
}
}
В файле top.ascx.cs:
private static Control _leftUC;
private static Control _rightUC;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
InitWebUserControls();
}
// Note: if your UserControl is defined in the ascx Page, use that definition
// instead of the dynamically loaded control `_right_UC`. Same for `_leftUC`
private void InitWebUserControls()
{
_leftUC = Page.LoadControl("left.ascx");
_rightUC = Page.LoadControl("right.ascx");
((right)_rightUC).RightButton_Clicked += new EventHandler(RightUC_Event);
}
void RightUC_Event(object sender, EventArgs e)
{
((left)_leftUC ).UpdateControl();
}
В файле left.ascx:
public void UpdateControl()
{
leftRadTreeView.Rebind();
}
Если вы в конце концов захотите передать аргумент события в top.ascx UserControl
, Вместо того, чтобы использовать new EventArgs()
использовать пользовательский класс, который реализует EventArgs
и используйте это так:
int myArgument = 1;
handler(this, new RightEventArgs(myArgument));
public class RightEventArgs: EventArgs
{
public int argumentId;
public RightEventArgs(int selectedValue)
{
argumentId = selectedValue;
}
}
И тогда вы можете отфильтровать события, которые были переданы в top.ascx, проверив его EventArgs
тип бетона:
private void InitWebUserControls()
{
_leftUC = Page.LoadControl("left.ascx");
((left)_leftUC ).LeftButton_Clicked += new EventHandler(Child_Event);
_rightUC = Page.LoadControl("right.ascx");
((right)_rightUC).RightButton_Clicked += new EventHandler(Child_Event);
}
void Child_Event(object sender, EventArgs e)
{
if( e is RightEventArgs)
{
((left)_leftUC).UpdateControl();
}
else if (e is LeftEventArgs)
{
((right)_rightUC).ClearSelection();
}
}