/ / Lier les données au répéteur au clic du bouton du contrôle de l'utilisateur dans un autre répéteur - c #, asp.net, contrôles de l'utilisateur, répéteur

Lier les données au répéteur au clic du bouton du contrôle de l'utilisateur dans un autre répétiteur

J'ai une page avec 2 répéteurs dessus et chaque répéteur contient un contrôle utilisateur.

L’idée est que lorsque vous cliquez sur un bouton de lausercontrol dans le répéteur à gauche, les données sont extraites de la base de données et définies comme source de données pour le répéteur à droite. J'utilise event bubbling pour transmettre l'événement du contrôle utilisateur à la page afin que je puisse obtenir les données et les définir pour l'autre répéteur.

Mon problème est que le gestionnaire d’événements ItemDataBound n’est plus appelé après la définition de la source de répéteur dans le gestionnaire d’événements de la page pour l’événement du bouton de contrôle de l’utilisateur.

Voici la mise en page de la page

<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>

Et voici le gestionnaire d'événements pour l'événement de clic du bouton de contrôle de l'utilisateur.

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();
}

Lorsque je clique sur le bouton du contrôle utilisateur, les événements suivants se produisent:

  1. Page_Load de la page s'exécute, ce qui définit la source par défaut pour le deuxième répéteur
  2. Le gestionnaire ItemDataBound du répéteur s'exécute, ce qui définit les propriétés du contrôle utilisateur avec les données.
  3. Page_Load des contrôles utilisateur s'exécute qui définit les étiquettes sur le contrôle utilisateur avec ses valeurs de propriété.
  4. Le gestionnaire d'événements cstUserInfo_ShowMessagesClicked s'exécute pour définir une nouvelle source de données pour le répéteur.
  5. Le Page_load du contrôle utilisateur s'exécute à nouveau et lève une exception car les propriétés ne sont pas encore définies

Est-il possible de lier les nouvelles données au deuxième répéteur lorsqu'un bouton du contrôle utilisateur du premier répéteur est enfoncé?

Réponses:

1 pour la réponse № 1

Vous voudrez utiliser ItemCreated.

repeater.ItemCreated += new ItemCreatedEventHandler()

Il est appelé à chaque fois qu'un élément est créé pour être lié au répéteur.