vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
FlexGrid sortiern nach Spaltenbezeichner mit Datum 
Autor: Virtex
Datum: 03.09.21 09:45

Hallo zusammen,

Ich habe mir hier den Tipp angeschaut "FlexGrid beim Klick auf den Spaltenbezeichner sortieren"

Das funktioniert super und ich bin froh das es diese Funktion gibt. Für einige Spalten musste ich die Sortierfunktion anpassen damit da korrekt sortiert wird. Nur bei einer Spalte in der ein Datum steht, komm ich irgendwie nicht weiter.

Weder .Sort = flexSortStringDescending noch .Sort = flexSortGenericDescending (beide auch mit Ascending) bringen den gewünschten Erfolg.

Nun hab ich gesehen, das man ein Compare Funktion nutzen soll. Leider ist der Aufbau da ein ganz anderer, so dass ich da irgendwie auf dem Schlauch stehe.

Die Spalte die ich nach Datum sortieren möchte ist Spalte 19.
Ich hab beim füllen des FlexGrid ebenfall schon versucht den String direkt in ein Datum zu parsen und war in der Hoffnung das es dann klappt, aber leider auch Fehlanzeige.

Der bisherige Quelltext dazu:

Private Sub MSFlexGrid1_Click()
With MSFlexGrid1
 
    If .MouseRow = 0 And .MouseCol > 0 Then
 
      ' Gridinhalt sortieren
      If nLastSortCol = .MouseCol Then
        ' Sortierung umkehren
        '1 und 21 nach String sortieren lassen
        If .MouseCol = 1 Or .MouseCol = 21 Then
 
            If nLastSortDesc = flexSortGenericAscending Then
                .Sort = flexSortStringDescending
                nLastSortDesc = flexSortGenericDescending
            Else
                .Sort = flexSortStringAscending
                nLastSortDesc = flexSortGenericAscending
            End If
 
        Else
            If nLastSortDesc = flexSortGenericAscending Then
                .Sort = flexSortGenericDescending
                nLastSortDesc = flexSortGenericDescending
            Else
                .Sort = flexSortGenericAscending
                nLastSortDesc = flexSortGenericAscending
            End If
        End If
 
 
      Else
 
        ' aufsteigende Sortierung
        '1 und 21 nach String sortieren lassen
        If .MouseCol = 1 Or .MouseCol = 21 Then
            .Sort = flexSortStringAscending
            nLastSortCol = .MouseCol
            nLastSortDesc = flexSortGenericAscending
 
        Else
 
            .Sort = flexSortGenericAscending
            nLastSortCol = .MouseCol
            nLastSortDesc = flexSortGenericAscending
        End If
 
      End If
Würde gerne vermeiden noch weitere Colums anzulegen als Hilfsspalten. Ist das ohne überhaupt möglich? Und wenn ich welche anlegen muss, klappt das dann überhaupt mit Klick auf den Spaltenbezeichner?

Gruß

Virtex
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: FlexGrid sortiern nach Spaltenbezeichner mit Datum 
Autor: Virtex
Datum: 03.09.21 12:11

Habs nun doch über eine Hilfszeile (22) gemacht.
Dafür konvertiere ich das Datum in einen Zahlenwert (so wie in Excel (1.1.1900)

CLng(CDate(SplitString(temp4, " -", 1)))
und im Flexgrid sortier ich dann so:
(Quasi die Col umsetzen auf die Spalte nach der sortiert werden soll)

Private Sub MSFlexGrid1_Click()
With MSFlexGrid1
    ' Klick auf Spaltenbezeichner?
    If .MouseRow = 0 And .MouseCol > 0 Then
      ' Gridinhalt sortieren
      If nLastSortCol = .MouseCol Then
        ' Sortierung umkehren
 
        If .MouseCol = 1 Or .MouseCol = 21 Then
 
            If nLastSortDesc = flexSortGenericAscending Then
                .Sort = flexSortStringDescending
                nLastSortDesc = flexSortGenericDescending
            Else
                .Sort = flexSortStringAscending
                nLastSortDesc = flexSortGenericAscending
            End If
 
        Else
            If nLastSortDesc = flexSortGenericAscending Then
                .Sort = flexSortGenericDescending
                nLastSortDesc = flexSortGenericDescending
            Else
                .Sort = flexSortGenericAscending
                nLastSortDesc = flexSortGenericAscending
            End If
        End If
 
 
      If .MouseCol = 19 Then
        .Col = 22
            If nLastSortDesc = flexSortGenericAscending Then
                .Sort = flexSortStringDescending
                nLastSortDesc = flexSortGenericDescending
            Else
                .Sort = flexSortStringAscending
                nLastSortDesc = flexSortGenericAscending
            End If
 
        Else
            If nLastSortDesc = flexSortGenericAscending Then
                .Sort = flexSortGenericDescending
                nLastSortDesc = flexSortGenericDescending
            Else
                .Sort = flexSortGenericAscending
                nLastSortDesc = flexSortGenericAscending
            End If
        End If
 
      Else
 
        ' aufsteigende Sortierung
        If .MouseCol = 1 Or .MouseCol = 21 Then
            .Sort = flexSortStringAscending
            nLastSortCol = .MouseCol
            nLastSortDesc = flexSortGenericAscending
 
        Else
        If .MouseCol = 19 Then
            .Col = 22
            .Sort = flexSortStringAscending
            nLastSortCol = .MouseCol
            nLastSortDesc = flexSortGenericAscending
 
        Else
 
            .Sort = flexSortGenericAscending
            nLastSortCol = .MouseCol
            nLastSortDesc = flexSortGenericAscending
        End If
      End If
      End If
Manchmal geht es doch alleine, wollte euch die Lösung aber nicht vorenthalten

Gruß

Virtex
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel