Zeilen innerhalb eines Repeaters nummerieren

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() %>&nbsp;&nbsp;
    </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()%>&nbsp;&nbsp;
    </ItemTemplate>
</asp:Repeater>

Das Beispielprojekt kann hier runtergeladen werden.

One thought on “Zeilen innerhalb eines Repeaters nummerieren

  1. Salute Kai

    In deinem Beispielprojekt ist eine Datei Namens “RepeaterRowNumber” ohne Endung.
    Es ist eine ZIP-Datei oder zumindest ein Archiv ;-)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>