Das Repeater Control eignet sich hervorragend um Daten auf ASP.NET Seiten anzuzeigen. Eine häufige Anforderung ist die Nummerierung jedes einzelnen Datensatzes. Viele Lösungen verwenden den ItemDataBound Event um die Zeilennummer mit Hilfe einer Variablen hochzuzählen und anzuzeigen. Jedes Repeater-Element verfügt jedoch über die Eigenschaft ItemIndex, die den aktuellen null basierten Index enthält. Somit kann auf einfache Weise die Zeilennummer angezeigt werden.
<asp:Repeater ID="rep1" runat="server"> <ItemTemplate> <%#(((RepeaterItem)Container).ItemIndex+1).ToString() %> </ItemTemplate> </asp:Repeater>
Problematisch ist diese Lösung, sobald die Datensätze über mehrere Seiten hinweg angezeigt werden sollen. In diesem Fall würde der Index auf jeder Seite erneut bei eins beginnen. Folgendes Beispiel verwendet die Klasse PagedDatasource um die Datensätze auf mehrere Seiten zu verteilen. Die Berechnung erfolgt nach dem Schema AnzahlProseite * AktuelleSeite + DatensatzIndex + 1. Zugegeben, die jetzt folgende Zeile ist sehr lang und auch auf den zweiten Blick nicht sehr eingängig, erfüllt jedoch ihren Zweck. Über die DataSource Eigenschaft des Repeater Controls, wird auf das PagedDataSource Objekt zugeriffen, welches die beiden fehlenden Werte bereit hält.
Das Ergebnis sind die korrekt nummerierten Werte, auch über mehrere Seiten hinweg.
<asp:Repeater ID="rep1" runat="server"> <ItemTemplate> <%#(((PagedDataSource)((Repeater)((RepeaterItem)Container).Parent).DataSource).PageSize * ((PagedDataSource)((Repeater)((RepeaterItem)Container).Parent).DataSource).CurrentPageIndex + (((RepeaterItem)Container).ItemIndex + 1)).ToString()%> </ItemTemplate> </asp:Repeater>
Das Beispielprojekt kann hier runtergeladen werden.
Salute Kai
In deinem Beispielprojekt ist eine Datei Namens “RepeaterRowNumber” ohne Endung.
Es ist eine ZIP-Datei oder zumindest ein Archiv ;-)