Привязка данных к повторителю по нажатию кнопки из пользовательского элемента управления в другом повторителе - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть страница с 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();
}

Когда я нажимаю кнопку на пользовательском элементе управления, происходит следующее:

  1. Page_Load страницы выполняется, что устанавливает источник по умолчанию для второго повторителя
  2. Выполняется обработчик ItemDataBound для повторителя, который устанавливает свойства пользовательского элемента управления с данными
  3. Выполняется Page_Load пользовательских элементов управления, который устанавливает метки на пользовательском элементе управления со значениями его свойств.
  4. Выполняется обработчик события cstUserInfo_ShowMessagesClicked, который устанавливает новый источник данных для повторителя
  5. Page_load пользовательского элемента управления выполняется снова и выдает исключение, потому что свойства еще не установлены

Есть ли способ привязать новые данные ко второму повторителю, когда кнопка напользовательский элемент управления в первом повторителе нажат?

1 Ответ

1 голос
/ 21 апреля 2011

Вы хотите использовать ItemCreated.

repeater.ItemCreated += new ItemCreatedEventHandler()

Он вызывается каждый раз, когда создается предмет, привязанный к повторителю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...