Announcement

Collapse
No announcement yet.

Gruppieren mit den ADO.NET-Komponenten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gruppieren mit den ADO.NET-Komponenten

    Hallo,

    ich erstelle gerade ein Online-Auswertungstool für Datenbanken. Darin sollen Funktionalitäten wie Sortieren, Filtern, Berechnen usw. verfügbar sein.

    Sortieren und Filtern ist ja schon in der DataView-Klasse verfügbar. Was ist aber, wenn ich Daten gruppieren oder gar eine oder mehrere Aggregatfunktionen verwenden muss?
    Wie kann ich das umsetzten? Geht das überhaupt mit den ADO.NET-Klassen?

    Danke,
    Andreas Gräfe

  • #2
    Hallo,

    >Geht das überhaupt mit den ADO.NET-Klassen?

    ja. Über die DataColumn-Eigenschaft <b>Expression</b> kann eine berechnete Spalte hinzugefügt werden, bei der der Wert auch dann automatisch aktualisiert werden, wenn die Ergebnismenge im DataTable offline (d.h. ohne Verbindung zur Datenbank) bearbeitet wird.

    Es stehen + - * / und % (modulo), LIKE, IN, IIF, Sum, Avg, Max, Min, StDev, Var und Count zur Verfügung. Über die Funktionen Len, IsNull, Convert, Trim, SubString und Iif können komplexere Expressions umgesetzt werden.

    Als "Ersatz" für Aggreations-Funktionen von SQL stellt das DataTable-Objekt die Methode <b>Compute</b> bereit. Das folgende Beispiel demonstriert den Einsatz:
    <pre>
    ' neue DataTable erzeugen
    Dim aNewDataTable As New DataTable()
    Dim aPKCol As DataColumn
    Dim aRowData As Object()
    aPKCol = aNewDataTable.Columns.Add("RecID", GetType(Int32))
    aPKCol.AutoIncrement = True
    aPKCol.AutoIncrementSeed = 1000
    aPKCol.AutoIncrementStep = 5
    aNewDataTable.Columns.Add("Nachname", GetType(String))
    aNewDataTable.Columns.Add("Vorname", GetType(String))
    aNewDataTable.Columns.Add("Alter", GetType(Int32))
    aNewDataTable.PrimaryKey = New DataColumn() {aPKCol}
    ' Datensatz eintragen
    aRowData = New Object() {Nothing, "Kosch", "Andreas", 40}
    aNewDataTable.LoadDataRow(aRowData, False)
    aRowData = New Object() {Nothing, "Mustermann", "Manfred", 55}
    aNewDataTable.LoadDataRow(aRowData, False)
    aRowData = New Object() {Nothing, "Regel", "Wolfgang", 51}
    aNewDataTable.LoadDataRow(aRowData, False)
    ' anzeigen
    DataGrid1.DataSource = aNewDataTable
    ' COMPUTE-Beispiel
    Dim iSumAlter As Integer = Convert.ToInt32(aNewDataTable.Compute("SUM(Alter)" , ""))
    MessageBox.Show(iSumAlter.ToString())
    iSumAlter = Convert.ToInt32(aNewDataTable.Compute("SUM(Alter)" , "Nachname='Kosch'"))
    MessageBox.Show(iSumAlter.ToString())
    </pre&gt

    Comment

    Working...
    X