Datagridview nach wert sortieren

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von xtts02.

    Datagridview nach wert sortieren

    hallo zusammen,
    wenn ich meine datagridview nach zahlen sortieren möchte sortiert es jene so:

    1
    10
    11
    12
    2
    3
    4
    5
    6
    ...

    wie kann ich es realisieren wenn ich so sortieren möchte.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    habe schon gegooglet und imForum gesucht aber nichts hat mir geholfen
    hab auch schon den valuetype des columns auf integer eingestellt.

    VB.NET-Quellcode

    1. DataGridView1.Columns.Item(0).SortMode = DataGridViewColumnSortMode.Automatic
    2. DataGridView1.Columns(0).ValueType = GetType(Integer)
    3. DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)


    Die datagrid ist datengebunden (falls das was ausmacht.)


    lg Fabian
    Wähle von deinem Datagridview im Eigenschaftenfenster "SortCompare". (doppelklick)
    oder gib folgende Sub direkt ein:

    VB.NET-Quellcode

    1. Private Sub Datagridview1_SortCompare(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewSortCompareEventArgs) Handles Datagridview1.SortCompare 'Datagridview1=ersetzen mit deinem gridviewelementnamen
    2. e.SortResult = CompareEx(e.CellValue1.ToString, e.CellValue2.ToString)
    3. e.Handled = True
    4. Exit Sub
    5. End Sub


    darunter fügst du folgende funktion ein:

    VB.NET-Quellcode

    1. Private Function CompareEx(ByVal s1 As Object, ByVal s2 As Object) As Integer
    2. Try
    3. 'konvertiert das Objekt zu String wenn möglich.
    4. Dim a As String = CType(s1, String)
    5. Dim b As String = CType(s2, String)
    6. 'wenn Werte gleich sind, wird 0 zurückgegeben
    7. If s1 = s2 Then Return 0
    8. 'wenn Spalte Datumswerte beinhaltet, wird nach Datum sortiert
    9. 'BEG: Datumscheck
    10. Dim IsDatum1 As Boolean = IsDate(a)
    11. Dim IsDatum2 As Boolean = IsDate(b)
    12. If IsDate(a) And IsDate(b) Then
    13. If Date.Parse(s1) > Date.Parse(s2) Then
    14. Return 1
    15. ElseIf Date.Parse(s1) < Date.Parse(s2) Then
    16. Return -1
    17. Else
    18. Return 0
    19. End If
    20. Exit Function
    21. End If
    22. 'END: Datumscheck
    23. 'wenn Spalte Zahlen beinhaltet, wird nach Zahlen sortiert
    24. Dim IsNum1 As Boolean = IsNumeric(a)
    25. Dim IsNum2 As Boolean = IsNumeric(b)
    26. If IsNum1 And IsNum2 Then
    27. If Double.Parse(s1) > Double.Parse(s2) Then
    28. Return 1
    29. ElseIf Double.Parse(s1) < Double.Parse(s2) Then
    30. Return -1
    31. Else
    32. Return 0
    33. End If
    34. ElseIf IsNum1 And IsNum2 = False Then
    35. Return -1
    36. ElseIf IsNum1 = False And IsNum2 Then
    37. Return 1
    38. Else
    39. Return String.Compare(s1, s2)
    40. End If
    41. Catch ex As Exception
    42. End Try
    43. 'wenn nix zu vergleichen ging, wird 0 zurückgegeben
    44. Return 0
    45. End Function


    funzt bei mir tadellos.
    Wenn Du bei Private Sub Datagridview1_SortCompare als Handles noch andere Gridviews übergibst, werden diese genauso sortiert
    also:
    Handles Datagridview1.SortCompare, Datagridview2.SortCompare usw.

    Hoffe es hilft
    Tschau
    das nennichmal Workaround.
    nämlich workaround um einen Designfehler, welcher darin besteht, Datentyp String zu nehmen für Daten, die Zahlen sind. Korrigiere deinen Designfehler und du brauchst auch keinen Workaround.

    (aber das mit DGV.SortCompare kanntichnochnich - mussichgleichmal was mit ausprobieren :))

    ne. Funzt scheinbar nicht mit datengebundenen DGVs - hmm, steht so ja auch inne msdn.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hallo,

    vieleicht kann ich dir helfen. Ich hatte das selbe Problem und konnte es letztendlich folgedermaßen lösen.
    Allerdings alles ohne Gewähr.... :)

    Versuch mal folgendes

    1) Projektmappen Explorer auswählen. (Diese öffnet sich rechts)
    2) Die Datenbank die du brauchst anwählen. (Mit Doppelklick)
    3) Es öffnet sich der Datenbank Explorer.(Links)
    4) Auf die Gewünschte Tabelle klicken.
    5) Die Spalte wie z.B (ID) auswählen mit der rechten Maustaste und Eigenschaften Wählen.
    6) Auf der rechten Seite öffnet sich das Eigenschaft Fenster.
    7) Datentyp Numeric auswählen und alles speichern.

    Ich hoffe das ich helfen konnte.

    Gruß ;)