DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
RowID in DataControl Events auslesen

Gott sei Dank muss man in ASP.NET 2.0 kaum richtigen Code schreiben. Manchmal braucht man es dann aber doch. Ich hatte das dringende Bedürfnis zwei Gridview Controls ineinander zu verschachteln. Dazu brauche ich aber die ID der aktuellen Reihe.

Die Row ID auszulesen der aktuellen Spalte ist aber auch in anderen Szenarien nützlich . Die logische Nummer ist als ID nicht gut geignet, weil sich diese z.B. durch umsortieren ändern kann. Am besten nimmt man den oder die Primary Keys die dem Control im Attribut Datakeynames übergeben werden.
Hier folgt eine Auflistung der Möglichkeiten je Control, allerdings nur mit einem Primary Key.

Gridview

Da ein Gridview meist mehr als einen Datensatz anzeigt, muss man ein Event auswählen das für jede Zeile gefeuert wird. Dabei hilft grundsätzlich RowDataBound. Diese Event erhält einen Parameter e der eine Referenz auf die aktuelle Row enthält. Diese wiederum kann per Dataitemindex identifiziert werden. Der Index wird dann als "Suchbegriff" verwendet um den richtigen Wert in den Datakeys zu finden.
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
    If e.Row.DataItemIndex >= 0 Then
            dim id as string=GridView1.DataKeys(e.Row.DataItemIndex).Value
   End If
     
End Sub

Da die Überschrift zwar eine Reihe darstellt, aber keinen Datakey enthält, muss sichergestellt werden das kein Laufzeitfehler auftritt. Dies wird hier mit der IF Verzweigung erledigt.

Detailsview & Formview

Beiden Controls ist gemein das sie nur einen Datensatz anzeigen. Trotzdem können Sie pagen und dann möchte man gerne die RowID auslesen. Erschwerend kommt hinzu wenn diese nicht angezeigt werden soll. Diesesmal kommt das Event Databound zum Einsatz.
Dies wird gefeuert, wenn die Datenbindung vollständig ( für den einen Datensatz durchgeführt wurde). Hier kommt die Eval Funktion des Databinders zum Einsatz. Vielleicht kennen Sie die Syntax von ASP.NET 1.1. Dort wurden in TemplateColumns auf deise Art ein Feld angesprochen bzw dessen Inhalt ausgegeben. Heute nimmt man in ASP.NET 2.0 dafür ja Eval, XPath oder Bind. Diese Kurz Kommandos funktionieren im Code aber nicht. Also muss die alte vollständige Schreibweise databinder.Eval ect verwendet werden.
Protected Sub DetailsView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
        Response.Write(DataBinder.Eval(DetailsView1.DataItem, "CustomerID").ToString())
End Sub

Datalist & Repeater

Als nächstes versuchen wir im Datalist Control die aktuelle ID einer Reihe zu erhalten. Hier zeigt sich das dieser Artikel seine Berechtigung hat. Diesemal heist das passende Event ItemDataBound. Passenderweise liefert der Parameter e ohne großen Hickhack per Item.Dataitem den passenden Wert zum Keyfeld.

Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs)
         Dim id As String = e.Item.DataItem("CustomerID")
End Sub

Beim Repeater Control funktionierts genauso.

 


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 16.09.2005
  Gültig bis: 15.12.2005
1 Ratings
Bewertung: 80,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG