Hallo!
Eine Dynamische Änderung der Sortierung von mehr als 1 Datenfeld ist da vielleicht der Spezialfall.
In meinen Anwendungen habe ich diesen Spezialfall durchaus öfter.
.. z. B. immer dann, wenn ich nach etwas sortiere, dass als zusammengesetzter Text gezeigt wird.
Beispiel:
Angezeigt wird: DokumentTypCode & Format([LaufendeNummer], "000000")
Sortiert wird nach DokumentTypCode, LaufendeNummer (wegen Möglichkeit zur Indexnutzung, da SQL mit OrderBy an den Server übergeben wird.)
Die Sortierung wird mit Klick auf das Bezeichnungsfeld des zusammengesetzten Textes eingeleitet => ich benötige 2x das [DYNSORT]-Tag im OrderBy-Template.
Zum Code von dir:
Du musst aufpassen, ob nicht irrtümlich bereits DESC beim ersten Feldnamen steht.
Vorschlag (ist aber Luftcode!):
- Code: Alles auswählen
Public Function GetOrderByString(ByVal UseDesc As Boolean)
Dim SplitString() As String
Dim DescString As String
Dim OrderString As String
If UseDesc Then
DescString = " DESC"
End If
OrderString = Replace(OrderByStatement, " ,", ",")
OrderString = Replace(OrderString, " [DESC]", DescString)
SplitString = Split(OrderString, ",")
OrderString(0) = Replace(Replace(OrderString(0), " ASC", vbnullstring), " DESC", vbNullstring) & DescString
GetOrderByString = Join(OrderString, ",")
End Function
Jetzt kann man für den ersten Feldnamen in der OrderBy-Angabe das [DESC] weglasssen.
Diese Variante finde ich allerdings nicht sehr einheitlich. Wenn man den dynamischen Wechsel mit [DESC] o. ä. angibt, warum wird dann auch im ersten Feldnamen die Sortierrichtung gendert, obwohl das nicht dabei steht?
=> Falls man das für den "Standardfeldnamen" nicht machen müssen muss, würde ich eher so eine Schnittstelle vorschlagen:
- Code: Alles auswählen
.Add Me.labFamilienname, "Familienname", "Vorname [DESC], LaenderCode, Ort, PLZ, Strasse"
Also:
- Code: Alles auswählen
Public Function Add(ByVal ControlRef As Control, ByVal DataFieldName as string, Optional ByVal AdditionalOrderByStatement As String) As FormSortingControl
...
LG
Josef