Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel 12 ASP.NET und Datenbanken
  gp 12.1 Auf Datenbanken zugreifen – ein Crashkurs
    gp 12.1.1 Eine Tabelle im Browser anzeigen
    gp 12.1.2 Über den Browser einen Datensatz hinzufügen
  gp 12.2 Wie ADO.NET funktioniert – ein Überblick
  gp 12.3 Die Verbindung zur Datenbank herstellen
    gp 12.3.1 OleDbConnection
    gp 12.3.2 SqlConnection
  gp 12.4 Daten lesen mit SqlCommand und OleDbCommand
    gp 12.4.1 ExecuteReader
    gp 12.4.2 ExecuteNonQuery und die Parameters-Collection
    gp 12.4.3 ExecuteScalar
  gp 12.5 SqlDataReader und OleDbDataReader
    gp 12.5.1 Ein Reader-Objekt an ein Steuerelement binden
    gp 12.5.2 Ein Reader-Objekt an ein Listensteuerelement binden
    gp 12.5.3 Ein Reader-Objekt zeilenweise auswerten
  gp 12.6 Die DataSet-Klasse
    gp 12.6.1 Das Zusammenspiel von Command, Adapter und DataSet
    gp 12.6.2 Mehrere Tabellen in ein DataSet-Objekt einlesen
    gp 12.6.3 Auf einzelne Zeilen, Spalten und Tabellen eines DataSet-Objekts gezielt zugreifen
    gp 12.6.4 Relationen zwischen Tabellen festlegen
  gp 12.7 DataViews verwenden
    gp 12.7.1 Tabellen sortieren
    gp 12.7.2 Tabellen nach Inhalten filtern
    gp 12.7.3 Nach dem Zeilenstatus filtern
    gp 12.7.4 In Tabellen suchen
  gp 12.8 Mit ASP.NET Daten bearbeiten
  gp 12.9 Daten bearbeiten mit dem Command-Objekt
  gp 12.10 In-Place-Editing mit dem DataGrid-Steuerelement
    gp 12.10.1 Die EditItemIndex-Eigenschaft
    gp 12.10.2 Das asp:DataGrid-Tag anpassen
    gp 12.10.3 OnEditCommand: Daten bearbeiten
    gp 12.10.4 OnCancelCommand: Die Bearbeitung abbrechen
    gp 12.10.5 OnUpdateCommand: Die Änderungen sichern
    gp 12.10.6 Das Repeater-Steuerelement verwenden
    gp 12.10.7 Die Ereignisse des Repeater-Steuerelements auswerten
  gp 12.11 Das DataList-Steuerelement
    gp 12.11.1 In-Place-Editing mit dem DataList-Steuerelement


Galileo Computing

12.7 DataViews verwenden  downtop

Ein DataView-Objekt stellt eine individuell angepasste Ansicht eines DataTable-Objektes zur Verfügung. Mit einem DataView-Objekt können Sie die Daten einer Tabelle filtern, sortieren, durchsuchen und bearbeiten. Ein DataView-Objekt können Sie an ein Steuerelement binden.


Galileo Computing

12.7.1 Tabellen sortieren  downtop

In Abschnitt 12.15, Das Zusammenspiel von Command, Adapter und DataSet, haben Sie alle Versandfirmen ausgegeben. Wenn Sie die Ausgabe alphabetisch nach Firmenname sortieren möchten, dann gehen Sie so vor:

1. Erstellen Sie ein DataView-Objekt. Dim alpha As DataView 2. Weisen Sie dem DataView-Objekt die Basistabelle zu. alpha = New DataView(myDS.Tables(0)) 3. Weisen Sie der Sort-Eigenschaft den gewünschten Sortierausdruck zu. alpha.Sort ="Firma ASC" 4. Binden Sie das DataView-Objekt an das Steuerelement. myGrid.DataSource = alpha
DataBind()

Der Eigenschaft Sort des DataView-Objekts weisen Sie den gewünschten Sortierausdruck zu. Im Prinzip entspricht dieser Teil dem ORDER-BY-Anteil eines entsprechenden SQL-Befehls.

5. Abbildung 12.16 zeigt die sortierte Tabelle im Browser.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 12.15 Mit dem DataView-Objekt können Sie Tabellen sortieren, filtern und durchsuchen.


Galileo Computing

12.7.2 Tabellen nach Inhalten filtern  downtop

So, wie Sie mit der Sort-Eigenschaft die Daten sortieren, können Sie über die RowFilter-Eigenschaft die Daten filtern. Natürlich können Sie auch beides miteinander verbinden. Alle Versandfirmen, deren Telefonnummer mit (503) anfängt, erreichen Sie über diesen Ausdruck:

alpha.RowFilter = "Telefon LIKE '(503)%'"

Die Angabe für die Eigenschaft RowFilter entspricht dem WHERE-Anteil eines SQL-Befehls. Als Platzhalterzeichen ist übrigens neben dem SQL-typischen % auch das * erlaubt. Zum Erfolg führt also auch dieser Ausdruck:

alpha.RowFilter = "Telefon LIKE '(503)*'"

Hier einige weitere Beispiele. Alle Versandfirmen mit einer Firmen-Nr. größer als 2 erreichen Sie mit diesem Ausdruck (db_13.aspx):

alpha.RowFilter = "[Firmen-Nr] > 2"

Achtung   Dabei müssen Sie darauf achten, das Feld Firmen-Nr in eckige Klammern einzuschließen. Der Bindestrich im Feldnamen würde sonst falsch ausgewertet werden.

Datumsangaben setzen Sie zwischen Doppelkreuze und verwenden die englische Datumsdarstellung MM/TT/JJJJ. Sie haben beispielsweise ein DataTable-Objekt mit diesem SQL-Ausdruck erstellt:

SELECT Bestelldatum, Empfänger FROM Bestellungen".

Wenn Sie alle Bestellungen vom November 1996 in chronologischer Reihenfolge darstellen wollen, verwenden Sie diese beiden Zuweisungen:

alpha.Sort ="Bestelldatum ASC"
alpha.RowFilter = "Bestelldatum >= #12/01/1996# AND Bestelldatum <=#12/31/1996#"

Galileo Computing

12.7.3 Nach dem Zeilenstatus filtern  downtop

Sie können Tabellen auch nach dem Zeilenstatus selektieren. Damit sind Abfragen folgender Art möglich: »Zeige mir alle Zeilen, die verändert/hinzugefügt/als gelöscht markiert/etc. wurden«. Hierfür verwenden Sie die Eigenschaft RowStateFilter. Die Enumeration DataViewRowState definiert die zulässigen Werte:

gp  Added die hinzugefügten Zeilen,
gp  CurrentRows die aktuellen Zeilen,
gp  Deleted die gelöschten Zeilen,
gp  ModifiedCurrent die geänderten Zeilen in der geänderten Form,
gp  ModifiedOriginal die ursprüngliche Form der geänderten Zeilen,
gp  None keine Zeilen,
gp  OriginalRows die Zeilen in der Originalversion,
gp  Unchanged die unveränderten Zeilen.

Der folgende Ausdruck selektiert beispielsweise die hinzugefügten Zeilen:

myView.RowStateFilter = DataViewRowState.Added

Mit dem booleschen Operator OR können Sie mehrere Angaben miteinander kombinieren.


Galileo Computing

12.7.4 In Tabellen suchen  toptop

»Gibt es Zeilen, die diesen und jenen Bedingungen entsprechen? Wenn ja, wo finde ich die erste passende Zeile? Zeige mir alle Treffer!« Für Anfragen dieser Art eignen sich die Find- und die FindRows-Methode. Find kann Ihnen sagen, ob es überhaupt entsprechende Zeilen gibt. Wenn ja, erhalten Sie die Indexposition des ersten passenden Datensatzes. Die FindRows-Methode liefert alle passenden Zeilen selbst in Form eines Arrays aus DataRowView-Objekten. Vorbedingung für die Verwendung beider Methoden ist, dass das DataView-Objekt nach dem Feld beziehungsweise nach den Feldern sortiert ist, in dem beziehungsweise in denen gesucht wird.

Gibt es Bestellungen vom 5.12.1996? So suchen Sie nach passenden Einträgen:

1. Erstellen Sie ein DataView-Objekt von der Tabelle Bestellungen. Dim dv As DataView
dv = New DataView(myDS.Tables(0)) 2. Sortieren Sie die Tabelle Bestellungen nach dem Bestelldatum. dv.Sort ="Bestelldatum ASC" 3. Rufen Sie die Find-Methode mit dem gesuchten Datum auf. Dim suchDatum As Date = #12/05/1996#
Dim erg As Integer
erg = dv.Find (suchDatum)

Wenn erg -1 zurückgibt, gibt es keine passenden Datensätze. Andernfalls enthält erg die Indexposition des ersten passenden Eintrags.

Falls Ihnen der erste passende Eintrag ausreicht, können Sie mit der Indexposition direkt auf den gefundenen Datensatz zugreifen. So lesen Sie beispielsweise das Feld Empfänger des gefundenen Datensatzes aus:

dv(erg)("Empfänger")

Wenn Sie das Feld im Rahmen von String-Operationen verwenden, müssen Sie es erst noch in den Datentyp String konvertieren, etwa so:

dv(erg)("Empfänger").toString()

Falls Sie alle Treffer benötigen, müssen Sie noch FindRows aufrufen. FindRows liefert die Ergebnismenge als Array aus DataRowView-Objekten. Dieses Array können Sie als Datenquelle für ein DataGrid-Steuerelement angeben:

Dim drv As DataRowView()
drv = dv.FindRows (suchDatum)
myGrid.DataSource = drv
myGrid.DataBind()

db_15.aspx fasst diese Suchschritte zusammen. Abbildung 12.16 zeigt die Darstellung im Browser.

   ' ...
   ' DataView erstellen
   Dim dv As DataView
   dv = New DataView(myDS.Tables(0))
   ' DataView nach der Spalte sortieren, in der 
   ' gesucht werden soll 
   dv.Sort ="Bestelldatum ASC" 
   ' Feststellen, ob es passende Einträge gibt. 
   Dim suchDatum As Date = (#12/05/1996#)  
   Dim erg As Integer
   erg = dv.Find (suchDatum)
   ' Suchergebnis ausgeben
   Dim sb As New StringBuilder
   sb.Append("Gibt es Bestellungen vom ")
   sb.Append(CStr (suchDatum) & "?<br>")
   If erg = -1 Then
      sb.Append ("Es gibt keine passenden Datensätze")
   Else
      sb.Append("Es gibt passende Datensätze. <br>")
      sb.Append("Der erste passende Datensatze hat ")
      sb.Append("die Indexposition: " & CStr(erg))  
      ' Passende Datensätze anzeigen 
      Dim drv As DataRowView()
      drv = dv.FindRows (suchDatum)
      myGrid.DataSource = drv
      myGrid.DataBind()
   End If
   ausgabe.innerHTML = sb.toString() 
   ' ...

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 12.16 Die Methoden Find und FindRows ermöglichen das gezielte Suchen in DataView-Objekten.


Konstruktoren
New()
New(DataTable)
New(DataTable, String, String, DataViewRowState)
Neben dem DataTable können RowFilter, Sort und DataViewRowState dem Konstruktor übergeben werden.
Eigenschaften
AllowDelete Boolean True, wenn Löschen erlaubt ist
AllowEdit Boolean True, wenn Bearbeiten erlaubt ist
AllowNew Boolean True, wenn mit AddNew neue Zeilen hinzugefügt werden dürfen
ApplyDefaultSort Boolean True, wenn die Standardsortierung verwendet werden soll
Count Integer Anzahl der Datensätze nach Anwendung von RowFilter und RowStateFilter
DataViewManager DataViewManager Der zugeordnete DataViewManager
Item(Integer) DataRowView Standardeigenschaft. Die über die Ordnungszahl definierte Zeile
RowFilter String Filterausdruck. Entspricht weit gehend dem WHERE-Ausdruck eines SQL-Statements
RowStateFilter DataViewRowState Selektiert die Zeilen nach ihrem Status. Mögliche Werte der Enumeration DataViewRowState sind: Added, CurrentRows, Deleted, ModifiedCurrent, ModifiedOriginal, None, OriginalRows, Unchanged.
Sort String Sortierausdruck. Entspricht der ORDER-BY-Klausel eines SQL-Statements
Table DataTable Die zugrunde liegende Tabelle
Methoden
AddNew() DataRowView Fügt der DataView eine neue Zeile hinzu
Delete(Integer) Löscht eine Zeile
Find(Object)
Find(Object())
Integer Sucht eine Zeile anhand des Sortierschlüsselwertes. Die DataView muss nach der Spalte, in der gesucht wird, sortiert sein.
FindRows(Object)
FindRows(Object())
DataRowView() Liefert ein Array von DataRowView-Objekten, deren Spalten dem Sortierschlüsselwert entsprechen
GetEnumerator() IEnumerator Ein Enumerator für dieses DataView

Tabelle 12.9 Steckbrief der Klasse DataView

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de