У меня есть страница с 2 повторителями, и каждый из них содержит пользовательский элемент управления.
Идея состоит в том, что при нажатии кнопки на пользовательском контроле в повторителе слева данные извлекаются избазы данных и установить в качестве источника данных для повторителя справа.Я использую всплывающее событие, чтобы передать событие от пользовательского элемента управления на страницу, чтобы я мог получить данные и установить их для другого повторителя.
Моя проблема заключается в том, что обработчик события ItemDataBound не вызывается снова послеустановка источника повторителя в обработчике событий страницы для события кнопки управления пользователем.
Вот макет страницы
<div id="leftDiv">
<asp:Repeater ID="rptUser" runat="server">
<ItemTemplate>
<custom:UserInfo ID="cstUserInfo" runat="server" />
<br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="rightDiv">
<asp:Repeater ID="rptMessages" runat="server">
<ItemTemplate>
<custom:MessageDetails ID="cstMessageDetails" runat="server" />
</ItemTemplate>
</asp:Repeater>
</div>
А вот обработчик события для нажатия кнопки управления пользователемevent.
private void cstUserInfo_ShowMessagesClicked(object sender, EventArgs e)
{
UserInfoControl userInfoControl = sender as UserInfoControl;
//Get the messages
messageManager = new MessageManager();
List<Messages> messages = messageManager.GetMessageDetailsByUserId(userInfoControl.CurrentUser.Id).ToList();
rptTimeline.DataSource = messages;
rptTimeline.ItemDataBound += new RepeaterItemEventHandler(rptMessages_ItemDataBound);
rptTimeline.DataBind();
}
Когда я нажимаю кнопку на пользовательском элементе управления, происходит следующее:
- Page_Load страницы выполняется, что устанавливает источник по умолчанию для второго повторителя
- Выполняется обработчик ItemDataBound для повторителя, который устанавливает свойства пользовательского элемента управления с данными
- Выполняется Page_Load пользовательских элементов управления, который устанавливает метки на пользовательском элементе управления со значениями его свойств.
- Выполняется обработчик события cstUserInfo_ShowMessagesClicked, который устанавливает новый источник данных для повторителя
- Page_load пользовательского элемента управления выполняется снова и выдает исключение, потому что свойства еще не установлены
Есть ли способ привязать новые данные ко второму повторителю, когда кнопка напользовательский элемент управления в первом повторителе нажат?