У меня есть код, который изменяет значение, к которому привязаны несколько элементов управления в других панелях обновления. Когда срабатывает этот обработчик событий, я бы хотел, чтобы он принудительно обновил и другие панели обновления, чтобы они могли выполнить повторную привязку.
Это возможно?
Редактировать:
Чтобы уточнить, у меня есть панель обновлений в одном пользовательском элементе управления, другие панели обновлений находятся в других пользовательских элементах управления, поэтому они не могут видеть друг друга, если я не раскрываю некоторые настраиваемые свойства и не использую findControl и т. д. И т. Д.
Изменить снова:
Вот что я придумал:
public void Update()
{
recursiveUpdate(this);
}
private void recursiveUpdate(Control control)
{
foreach (Control c in control.Controls)
{
if (c is UpdatePanel)
{
((UpdatePanel)c).Update();
}
if (c.HasControls())
{
recursiveUpdate(c);
}
}
}
У меня было 3 основных пользовательских элемента управления, которые были заполнены панелями обновлений, эти элементы управления были видны на главной странице, поэтому я добавил туда метод Update, который вызывал обновление для этих трех.
В моем элементе управления запуском я просто привел this.Page к текущей странице и вызвал Update.
Редактировать:
ААРРГГГГ!
Пока панели обновления обновляются, он не вызывает Page_Load внутри субэлементов управления в них ... Что мне теперь делать!





Вы можете установить триггеры для событий на панели обновлений, которую хотите обновить, или вы можете явно указать updatepanel.update () в коде позади.
Как насчет регистрации PostBackTrigger (вместо AsyncPostBackTrigger), который будет обновлять каждую панель при возникновении определенного события.
Или добавьте триггер, который уже обновляет некоторые UpdatePanels, и в другие UpdatePanels.
Это хороший метод, если вы хотите обновить панель обновлений из клиентский Javascript.
Page.DataBind () запускает цикл привязки данных ко всем дочерним элементам управления. Это заставит Asp.Net переоценить выражения привязки для каждого элемента управления. Если этого недостаточно, вы можете добавить любую логику, которая, по вашему мнению, будет запущена в переопределение OnDataBinding или OnDataBound в ваших пользовательских элементах управления. Например, если вам нужно повторно выполнить событие Page_Load, вы можете просто вызвать его в своем переопределенном методе OnDataBound.
мгновенно передать обе панели представления третьему классу докладчика, а затем позволить классу докладчика управлять обоими представлениями. Например:
Вы могли бы просто пропустить то, что вам нужно, «средний класс» для выполнения своей работы, например, в вашем основном вы могли бы иметь;
PresenterClass.AttachInterface(mIOrder);
PresenterClass.DoSomeCalulation();
PresenterClass.drawPanel(1);
PresenterClass.AttachInterface(mIOtherOrder);
PresenterClass.DoSomeCalulation();
PresenterClass.drawPanel(2);
каждое представление будет иметь свои собственные элементы управления. Так много разных способов сделать это ... в качестве альтернативы вы можете использовать средний класс для мгновенного создания обеих панелей, тогда в каждой из ваших панелей вы можете иметь «методы получения» для извлечения данных для обработки.