Listen sind eine feine Sache um Daten zu visualisieren. Manchmal würde man auch gerne auf Anhieb sehen, wieviele Einträge in dieser Liste eigentlich vorhanden sind. Dafür stehen visuell zwei Möglichkeiten bereit. Entweder mit der Summe am Ende der Liste, wie man das von Rechungen kennt oder eine Durchnummerierung.
Wir wollen hier kurz die zweite Möglichkeit erörtern. Eine forlaufende nummerierung ist natürlich ganz einfach, wenn die Datenquelle das hergibt. Wenn aber eine solches Feld Positionsnummer fehlt oder durch Einsatz eines Filter falsche Werte zurückgibt, brauchen wir eine anderen Lösungsansatz.
Die Funktion heisst ItemIndex und steckt im Datacontainer.
Da dieser Count eine Eigenschaft des Datacontainer ist, funktioniert dies natürlich mit allen Datengebunden Listen wie z.B. die Datalist. Die Daten werden im Bereich ItemTemplate ausgegeben. Hier verwenden wir dazu ein Label. Da Indexe immer bei 0 beginnen erhöhen wir den Wert um 1, um einen echten Zähler zu realisieren.
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="rowcount.aspx.vb" Inherits="tonershop.rowcount"%> <HTML> <HEAD> </HEAD> <body MS_POSITIONING="FlowLayout"> <form id="Form1" method="post" runat="server"> <asp:DataList id="DataList1" runat="server"> <ItemTemplate> <asp:Label id="Label1" runat="server"> <%# Container.ItemIndex+1 %> </asp:Label> <asp:Label id="Label2" runat="server"> <%# Container.DataItem("au_lname") %> </asp:Label> </ItemTemplate> </asp:DataList> </form> </body> </HTML> |
Der vollständigkeit halber noch der Code, der die Daten holt und füllt. Als Tabelle wird Pubs verwendet die bei jeder SQL Standardinstallation dabei ist.
Imports System.Data Imports System.Data.SqlClient Public Class rowcount Inherits System.Web.UI.Page Protected WithEvents DataList1 As System.Web.UI.WebControls.DataList
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=localhost;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Authors", MyConnection) DS = New DataSet() MyCommand.Fill(DS, "Authors") DataList1.DataSource = DS.Tables("Authors").DefaultView DataList1.DataBind() End Sub
End Class |
Natürlich lässt sich das im Grid auch verwenden
<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True"> <Columns> <asp:TemplateColumn> <ItemTemplate> <asp:Label runat="server" ID="Label1"> <%# Container.ItemIndex+1 %> </asp:Label> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> |