Une autre solution consiste simplement à utiliser deux répéteurs, l'un imbriqué dans l'autre. Vous pouvez transmettre vos groupes avec les enregistrements enfants au premier répéteur, et sur la balise ItemDataBound du répéteur de groupes, passez les enregistrements enfants au répéteur enfant et appelez DataBind() à cet endroit.
Ceci est plus de code mais vous donne réellement plus de contrôle sur la mise en page sans avoir de code de création HTML dans votre code-behind. Comme vous pouvez le voir ici, nous avons un répéteur parent et dans le modèle d'élément, nous pouvons personnaliser chaque groupe comme bon nous semble.Dans le ChildRepeater, nous avons notre modèle d'élément dans lequel nous pouvons personnaliser chaque élément à l'intérieur du groupement. Très propre et tout avec interface utilisateur déclarative.
<asp:Repeater runat="server" id="GroupRepeater">
<ItemTemplate>
<asp:Literal runat="server" id="HeaderText" />
<asp:Repeater runat="server id="ChildRepeater">
<ItemTemplate>
<asp:Literal runat="server" id="InfoGoesHere" />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
Dans le code derrière nous pouvons avoir quelque chose comme ceci:
private void GroupRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//Get the child records, this can be any data structure you want
SomeChildCollection children = ((SomeGroupCollection)e.Item.DataItem).Children;
//Find the child repeater
Repeater childRepeater = e.Item.FindControl("ChildRepeater") as Repeater;
childRepeater.ItemDataBound += SomeMethod;
childRepeater.DataSource = children;
childRepeater.DataBind();
}
Après la liaison de chaque enfant, vous pouvez souscrire à l'événement ItemDataBound et faire l'enfant se liant à des contrôles comme bon vous semble.
Bravo, c'est ce que je cherche. – ctrlalt3nd
Cet article ne fonctionne plus. – NotMe