在另一个中继器的用户控件上单击按钮将数据绑定到中继器

本文关键字:中继器 按钮 数据绑定 单击 控件 另一个 用户 | 更新日期: 2023-09-27 17:50:37

我有一个页面上有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>

这是用户控件按钮点击事件的事件处理程序

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. 设置用户控件的属性
  4. 执行用户控件的Page_Load,它用其属性值设置用户控件上的标签。
  5. 执行为中继器设置新数据源的事件处理程序cstUserInfo_ShowMessagesClicked
  6. 用户控件的Page_load再次执行并抛出异常,因为属性尚未设置

在第一个中继器中按下用户控件上的按钮时,是否有任何方法将新数据绑定到第二个中继器?

在另一个中继器的用户控件上单击按钮将数据绑定到中继器

您将需要使用ItemCreated。

repeater.ItemCreated += new ItemCreatedEventHandler()

在每次创建绑定到重复器的项时调用。