DevTrain

Autor: Hannes Preishuber

Zeilennummerierung im Datagrid

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>


 


Erfasst am: 05.08.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=792
© Copyright 2003 ppedv AG - http://www.ppedv.de