ListView-Inhalt nach Datum sortieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    ListView-Inhalt nach Datum sortieren

    Ich hab eine ListView mit sehr vielen Einträgen, es gibt 2 Spalten mit Datum, wie kann ich nun die Einträge nach Datum sortieren, wenn ich z.b. auf die erste Datum Spalte klicke, dann soll das Datum entweder aufsteigend oder absteigend in der Spalte sortiert werden.
    Nun entlich auch mal eine Frage an dich,

    warum immer die ListView. Ihr ärgert euch immer wieder über das Teil
    Warum nehmt ihr nicht die DataGridView. Das Teil ist doch vielseitiger !?

    danke
    bernd

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

    So,
    ich glaube ich habe entlich wetwas gefunden.
    Einer der User hier hat eine Tool Namens "wintoolz.CodeGallerie" rausgebracht. (CodeName weis ich nicht mehr)
    den richtigen Name poste ich nicht.
    Das habe ich mir runter geladen und folgendes gefunden:
    Beschreibung:
    "Durch diesen Code lassen sich endlich auch die einzelnen Spalten einer ListView sortieren."
    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'Das Klassenmodul ListViewComparer
    2. Public Class ListViewComparer
    3. Implements IComparer
    4. Private intColumn As Integer
    5. Private soSortOrder As SortOrder
    6. Private cicComparer As CaseInsensitiveComparer
    7. Public Sub New(ByVal ParentListView As ListView)
    8. intColumn = 0
    9. soSortOrder = SortOrder.None
    10. cicComparer = New CaseInsensitiveComparer()
    11. ParentListView.ListViewItemSorter = Me
    12. End Sub
    13. Public Property SortOrder() As SortOrder
    14. Get
    15. Return soSortOrder
    16. End Get
    17. Set(ByVal value As SortOrder)
    18. soSortOrder = value
    19. End Set
    20. End Property
    21. Public Property SortColumn() As Integer
    22. Get
    23. Return intColumn
    24. End Get
    25. Set(ByVal value As Integer)
    26. intColumn = value
    27. End Set
    28. End Property
    29. Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
    30. Dim compareResult As Integer
    31. Dim listviewX As ListViewItem, listviewY As ListViewItem
    32. listviewX = CType(x, ListViewItem)
    33. listviewY = CType(y, ListViewItem)
    34. compareResult = cicComparer.Compare(listviewX.SubItems(intColumn).Text, listviewY.SubItems(intColumn).Text)
    35. If soSortOrder = SortOrder.Ascending Then
    36. Return compareResult
    37. ElseIf soSortOrder = SortOrder.Descending Then
    38. Return compareResult * -1
    39. Else
    40. Return 0
    41. End If
    42. End Function
    43. End Class
    44. 'Die Windowsform Form1
    45. Public Class Form1
    46. Private cmpFileListViewComparer As ListViewComparer
    47. Public Sub New()
    48. ' This call is required by the Windows Form Designer.
    49. InitializeComponent()
    50. ' Add any initialization after the InitializeComponent() call.
    51. cmpFileListViewComparer = New ListViewComparer(ListView1)
    52. End Sub
    53. Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
    54. If e.Column = cmpFileListViewComparer.SortColumn Then
    55. If cmpFileListViewComparer.SortOrder = SortOrder.Ascending Then
    56. cmpFileListViewComparer.SortOrder = SortOrder.Descending
    57. Else
    58. cmpFileListViewComparer.SortOrder = SortOrder.Ascending
    59. End If
    60. Else
    61. cmpFileListViewComparer.SortOrder = SortOrder.Ascending
    62. End If
    63. cmpFileListViewComparer.SortColumn = e.Column
    64. ListView1.Sort()
    65. End Sub
    66. End Class

    wenn ich den User finde, poste ich ihn noch.
    ich habe diesen Code nicht probiert.

    aber vieleicht hilft er dir ja.
    Ich habe sowas ähnliches für ein größeres Projekt geschrieben, aber mein Code kann nur Texte aber keine Datum sortieren, der obige hat das selbe Problem.

    Ich werd mich um das Problem erstmal selber drum kümmern. Vllt. finde ich ja was mir weiterhilft.
    Ich erweiter gerade mein ListViewSorter so, dass man auch Spalten mit Datum und numerische Werte sortieren kann. Bei meinem ListViewSorter verwende ich die Klasse "CaseInsensitiveComparer". Nun wollte ich fragen, kann ich das auch bei Datum und Numerische Werte verwenden.