Datatable zufällige sortieren

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von vico255.

    Ja, das geht am besten, wenn Du Deiner Datatabele ein Positionsfeld hinzufügst, und anschliessend, z.B. in einer Bindingsource, nach diesem Feld sortierst.
    Hab' an den letzten Tagen die gleiche Problemstellung gehabt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Partial Public Class Helper
    2. ''' <summary>
    3. ''' Zufälliges Sortieren einer Datatable nach demk Hilfsfeld "Position"
    4. ''' </summary>
    5. ''' <param name="dt"></param> Die zu sortierende Datatable
    6. ''' <remarks>
    7. ''' Das Feld "Position" muss einen einmaligen int32-Wert von 0 bis dt.rows.count-1 beinhalten.
    8. ''' Kann zum Beispiel der Wert eines Autoincrement-Feldes sein.
    9. ''' Bei Verwendung eines typisierten Datasets/einer typisierten Datatable wird's noch einfacher.
    10. ''' </remarks>
    11. Public Shared Sub RandomizeDatatable(dt As DataTable)
    12. Dim available As New List(Of Integer)(dt.Rows.Count)
    13. For Each row As DataRow In dt.Rows
    14. available.Add(row("Position"))
    15. Next
    16. Dim result As New List(Of Integer)(dt.Rows.Count)
    17. While available.Count > 0
    18. Dim index As Integer = GetRandom(0, available.Count - 1)
    19. result.Add(available(index))
    20. available.RemoveAt(index)
    21. End While
    22. Dim i As Int32 = 0
    23. For Each index As Int32 In result
    24. dt.Rows(i).Item("Position") = index
    25. i += 1
    26. Next
    27. dt.DataSet.AcceptChanges()
    28. End Sub
    29. Private Shared Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
    30. ' Generator ist statisch ausgelegt. Dadurch wird verhindert, dass bei wiederholtem Aufruf
    31. ' die Zufallszahlen immer wieder mit den gleichen Anfangswerten generiert werden.
    32. Static Generator As System.Random = New System.Random()
    33. Return Generator.Next(Min, Max + 1)
    34. End Function
    35. End Class