DataTable sortieren?

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von MAF1981.

    DataTable sortieren?

    Hallo Zusammen,

    ich habe das Problem, dass nach einer Datenbankabfrage ich mir aus einem DataSet eine DataTable hole und die nicht sortiert bekomme. Leider habe ich bisher dazu nichts gefunden.
    Hier der Code, der nicht sortiert:

    VB.NET-Quellcode

    1. Private Function ...
    2. Dim localDataset As New DataSet()
    3. Dim oleConnection As OleDbConnection = openDatabase()
    4. 'Zur Veranschaulichung, die Übergabeparameter in die Funktion:
    5. sDatabaseTable = "finanzen"
    6. konstanten.JAHR_IN_ALLEN_TABELLEN = "jahr"
    7. currentYear = "2011"
    8. sDatasetNameOfAllRecords = "dsResultFINANZEN"
    9. sSortColum = "Belegnummer"
    10. bSortASCENDING = True
    11. Dim oleAdapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM " & sDatabaseTable & " WHERE " & konstanten.JAHR_IN_ALLEN_TABELLEN & "=" & currentYear, oleConnection)
    12. oleAdapter.Fill(localDataset, sDatasetNameOfAllRecords)
    13. 'Fügt die Spalte "Saldo" in das Dataset ein, damit am Ende absteigend sortiert werden kann
    14. If bKonto = True Then
    15. localDataset = addSaldoColumnToDatasetKonto(localDataset)
    16. Else
    17. localDataset = addSaldoColumnToDatasetHandkasse(localDataset)
    18. End If
    19. 'Bestimme Sortierreihenfolge
    20. Dim sSortOrder = " ASC"
    21. If bSortASCENDING = False Then
    22. sSortOrder = " DESC"
    23. End If
    24. 'Nun nach sSortColumn sortieren...
    25. 'HIER FUNKTIONIERT DIE SORTIERUNG NICHT
    26. Dim dt As DataTable = localDataset.Tables(sDatasetNameOfAllRecords)
    27. Dim view As DataView = dt.DefaultView
    28. view.Sort = sSortColum & sSortOrder
    29. Dim dtTemp As DataTable = view.ToTable()
    30. localDataset.Tables.Clear()
    31. localDataset.Tables.Add(dtTemp)
    32. getDataSetOfAllRecords = localDataset
    33. End Function


    D.h. es soll nach einer Spalte "Belegnummer" (deren Werte 'Integer' sind) sortiert werden. Weiß jemand, wie ich das relativ einfach gelöst bekomme?


    Vielen Dank,
    MAF1981
    Wie mein Vorredner schon gesagt hat: Sortier die Datensätze direkt im SQL-Statement.

    Allerdings bedeutet ASC aufsteigend (und kann weggelassen werden), d.h. der kleinste Wert zuerst. DESC bedeutet absteigend, d.h. der größte Wert zuerst.

    Du kannst also einfach schreiben:

    VB.NET-Quellcode

    1. Dim oleAdapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM " & sDatabaseTable & " WHERE " & konstanten.JAHR_IN_ALLEN_TABELLEN & "=" & currentYear & _
    2. " ORDER BY Belegnummer;", oleConnection)
    Vielen Dank,

    ich habe dadurch meinen Fehler gefunden... ich hatte in der DB Abfrage gar keine ORDER BY Klausel drinnen, daher kamen die Datensätze "irgendwie" zurück. Also anstatt der erwarteten Belegnummerfolge 1,2,3,4... kam irgendwie 5,6,7,1,2,3,... zurück. Ich habe nun ein ORDER BY ID eingefügt, dass die Datensätze nach dem internen Key sortiert, und nun klappt auch der Rest meines Codes, so wie oben.

    Viele Grüße,
    MAF1981