Gebundene Datagrid Spalte natürlich (wie im Win-Explorer) sortieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Dideldum.

    Gebundene Datagrid Spalte natürlich (wie im Win-Explorer) sortieren

    Hi Ihr Fachleute,

    ich stehe vor einem grossen Problem.
    Habe schon sämtliche Tips ausprobiert, die ich finden konnte.

    Ich habe eine Datagridview, die über eine BindingSource ( bsFiles.DataSource = dtFiles) an eine dtFiles = DataTable gebunden ist.
    In der Spalte 1 (type String) dieser DGV stehen die Objekte (Dateinamen), welche aus einem ausgewählten Node (Verzeichnis) eines TreeViews (Ordner-Liste) in die Datatable eingelesen wurden.
    Alles klappt auch prima.

    Nun mosert aber mein Kunde, dass die Sortierung der Objekt-Spalte nicht natürlich erfolgt, wie im Win-Explorer.

    Mein DGV zeigt also:
    "1.bmp"
    "12.bmp"
    "2.bmp"
    "3.bmp"

    Der Kunde will aber:
    "1.bmp"
    "2.bmp"
    "3.bmp"
    "12.bmp"

    Wo muss ich mit dem Brecheisen ran, um die DGV nach seinem (sicher auch logisch richtigem) Wunsch beim Anklicken des Spaltenkopfs nach dieser Vorgabe auf/Absteigend sortieren zu lassen?
    Ich finde keinen Zugang zu dieser Option.

    Kann mir da vielleiicht jemand von Euch helfen?
    Dgv_Files_SortCompare funzt leider nicht, wenn "sortMode" nicht "Programmatic" ist.

    Schönes RestWeekend @all :)
    Arbeite dich hier mal durch. Das ist ganz ähnlich. In dem SortCompare-Event kannste die Sortierung überschreiben.
    Von dem Filenamen (ein String) schneidest einfach die Endung ab und konvertierst es zum Integer.

    Was ist denn dgv_files_sortcompare?
    Ach Moment das ist ja dein Thread, den ich verlinkt habe. Warum machst du Sortmode dann nicht Programmatic?

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

    @Dideldum Sieh Dir mal diesen ExplorerComparer an:
    Array.Sort für DirectoryInfo.GetFiles nach Datum
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke Euch Beiden @Haudruferzappeltnoch und @RodFromGermany

    Habs hingefummelt bekommen: :)

    VB.NET-Quellcode

    1. Private Sub Dgv_Files_SortCompare(sender As Object, e As DataGridViewSortCompareEventArgs) Handles dgv_Files.SortCompare
    2. Select Case e.Column.Index
    3. Case = 1, 2
    4. e.Handled = True
    5. e.SortResult = StrCmpLogicalW(e.CellValue1.ToString(), e.CellValue2.ToString())
    6. Case = 3
    7. e.Handled = True
    8. e.SortResult = CInt(e.CellValue1).CompareTo(CInt(e.CellValue2))
    9. Case 4, 5, 6
    10. e.Handled = True
    11. e.SortResult = CDate(e.CellValue1).CompareTo(CDate(e.CellValue2))
    12. End Select
    13. End Sub


    So sortiert die Spalte 1 nach natürlicher Sortierung.
    Macht bei Objektnamen auch mehr Sinn - da muss ich meinem Kunden zustimmen... ;)

    Schönen Rest-Sonntag Euch wünsche (apropos - wo bleibt überhaupt die Sonne für diesen Tag? :/ )

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