Je voudrais ajouter un événement DataBinding au répéteur enfant lui-même:
<asp:Repeater ID="parentRepeater" runat="server">
<asp:Repeater ID="childRepeater" runat="server"
OnDataBinding="childRepeater_DataBinding" />
</asp:Repeater>
Ensuite, il suffit la mettre en oeuvre:
protected void childRepeater_DataBinding(object sender, System.EventArgs e)
{
Repeater rep = (Repeater)(sender);
int someIdFromParentDataSource = (int)(Eval("ParentID"));
// Assuming you have a function call `GetSomeData` that will return
// the data you want to bind to your child repeater.
rep.DataSource = GetSomeData(int);
rep.DataBind();
}
Je préfère le faire au niveau de contrôle au lieu du niveau ItemDataBound
si Si vous devez supprimer des contrôles ou des éléments dans vos modèles, vous n'avez pas à vous soucier de rechercher du code dans les contrôles parents qui l'utilisent. Tout se localise avec le contrôle lui-même. De plus, vous n'avez jamais à faire un FindControl
.
Si vous souhaitez remplacer un contrôle dans le futur, vous pouvez simplement le supprimer et votre code fonctionnera car il est entièrement autonome. L'utilisation de ItemDataBound
entraînerait la compilation de votre code, mais il planterait ou fonctionnerait de façon inattendue à l'exécution en raison de sa dépendance aux contrôles enfants.
trouve toujours bizarre quand ItemDataBound est utilisé pour cela. Y at-il une raison pour laquelle vous ne le faites pas au niveau du contrôle? – Kelsey
@Kelsey - cela a toujours fonctionné pour moi. Aucune raison de le faire autrement. – Anton
Voir ma réponse pour certains avantages à l'utilisation de l'événement de contrôle 'DataBinding' à la place. :) – Kelsey