2009-11-27 5 views
3

J'ai une source de données qui contient des éléments datés par ligne. Ceux-ci seront liés au répéteur et classés par date. Je voudrais présenter chaque mois comme une table séparée lors du rendu, mais y at-il un moyen de le faire avec un contrôle de répéteur sans avoir à ajouter plusieurs répéteurs dynamiquement à partir du code côté serveur?En-tête de répéteur ASP.Net par groupe (par exemple, mois)

Idéalement, je voudrais les éléments suivants:

Examples Data: 

Row 1: Title 1, 01/12/2009 
Row 2: Title 1, 02/12/2009 
Row 1: Title 1, 01/01/2010 
Row 1: Title 1, 02/01/2009 

Required output: 

Dec 09 
------------------------------- 
Title | Date     | 
-------------------------------| 
Title1 | 01/12/2009   | 
-------------------------------| 
Title2 | 02/12/2010   | 
-------------------------------| 

Jan 10 
------------------------------- 
Title | Date     | 
-------------------------------| 
Title1 | 01/01/2010   | 
-------------------------------| 
Title2 | 02/01/2010   | 
-------------------------------| 

Répondre

5

Vous pouvez utiliser les contrôles PlaceHolder dans ItemTemplate pour contenir les en-têtes et les pieds de page de groupe répétés. Définissez ensuite la visibilité des PlaceHolders dans les gestionnaires d'événements OnItemDataBound ou OnItemCreated en fonction des dates. Comme ceci:

<ItemTemplate> 

<asp:PlaceHolder id="table_end" visible="<%# _newMonthStarting && (!_firstMonth) %>" runat="server"> 
    </table> 
</asp:PlaceHolder> 

<asp:PlaceHolder id="table_end" visible="<%# _newMonthStarting %>" runat="server"> 
    <div><%# _monthHeader</div> 
    <table> 
    <tr> 
     <th>Title</th>  
     <th>Date</th>  
    </tr> 
</asp:PlaceHolder> 
    <tr> 
    <td><!-- data --></td> 
    <td><!-- data --></td> 
    </tr> 
</ItemTemplate> 

<FooterTemplate> 
    </table> 
</FooterTemplate> 
+0

Bravo, cela semble être le moyen le plus simple de mettre en œuvre ceci. J'avais espéré qu'il y avait un mécanisme du répéteur que je n'étais pas au courant de qui éviterait le code de côté de serveur mais ceci semble bon. –

+0

Dans mon expérience, j'ai dû utiliser l'événement 'OnItemCreated' pour m'assurer que le contenu' 'apparaissait devant le modèle d'élément courant. L'utilisation de l'événement 'OnItemDataBound' entraîne la fin du rang de l'en-tête de groupe. – JohnC

2

Votre exemple données et votre sortie ne correspondent pas, mais je pense que je sais ce que vous allez pour ici.

Je voudrais travailler sur cela pour obtenir 1 ensemble de données à lier dans le répéteur principal, ce serait vos données "Dec 09" et "Jan 10". À l'intérieur du modèle d'élément, vous disposez d'un autre répéteur, défini une seule fois, et utilisez simplement l'événement «OnDataBound» pour charger les données dans le second répéteur.

C'est simple, efficace et facile à gérer.