Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid nach Uhrzeit sortieren (https://www.delphipraxis.net/203203-stringgrid-nach-uhrzeit-sortieren.html)

H.Bothur 23. Jan 2020 14:11

Delphi-Version: 5

StringGrid nach Uhrzeit sortieren
 
Moin,

ich brauche mal einen Denkanstoß:

Ich habe ein Stringgrid mit zwei Feldern:

Feld 1: Name
Feld 2: Uhrzeit im Format HH:MM

Jetzt möchte ich die nächsten 5 Datensätze anzeigen lassen die uhrzeitmässig als nächstes kommen.
Aber - mir fehlt da irgendwie jeder Ansatz wie ich die Sortierung machen kann. Kann mich da mal jemand in die richtige Richtung schupsen ?

Danke !
Hans

hoika 23. Jan 2020 14:29

AW: StringGrid nach Uhrzeit sortieren
 
Hallo,
suchst Du Ansätze, wie man sortiert?
https://stackoverflow.com/questions/...ng-string-grid

oder wie Du das mit der Uhrzeit machen sollst?
HH:MM läßt sich sogar wie ein String sortieren (wenn die Stunden immer zwei Ziffern haben)

H.Bothur 23. Jan 2020 15:24

AW: StringGrid nach Uhrzeit sortieren
 
Jein - ich brauche einen Ansatz wie ich die Datensätze so sortiere das die nächsten Termine oben sind Hans. Aber das mit dem Tip die Uhrzeit immer zweistellig darzustellen war schon nicht schlecht :-)

Hans

hoika 23. Jan 2020 17:17

AW: StringGrid nach Uhrzeit sortieren
 
Hallo,
also Order By Desc ...

Tip:
Wenn Du dir das TAdvStringGrid von TMS leisten kannst, kauf es.
Das hat bereits ein CustomSort drin.

Ansonsten nimm einen der Quelltexte aus dem Link.

Dann eine
Delphi-Quellcode:
function Compare-Methode(A, B: String): Integer;
begin
  if A<B then
  begin
    Result:= 1;
    Exit;
  end;
  if A>B then
  begin
    Result:= -1;
    Exit;
  end;
  Result:= 0;
end;
Hier ist praktisch das Sortieren umgedreht.

Bitte nicht über den miesen Code herziehen :=)
Ist ja nur ein Bsp..

himitsu 23. Jan 2020 17:39

AW: StringGrid nach Uhrzeit sortieren
 
Die MemoryDataSets einiger Anbieter bieten auch eine OrderBy-Funktion an (Property mit Spaltennamen).
Und dazu statt dem StringGrid ein DBGrid verwenden. (bin mir grad nicht sicher, ob TClientDataSet sowas auch hat)

Ansonsten:
StringGrid.Rows[i].Text ist die ganze Daten-Zeile (alle Cell auf einmal kopieren, oder eben stattdessen noch eine Schleife über die gewünschten Cells),
dann brauchst nur noch eine Schleife zum Vergliechen (BubbleSort ist leicht zu bauen)
und jeweils entsprechend die Zeilen austauschen, welche nicht die richtige Reihenfolge haben.

Delphi-Quellcode:
for i1 := 0 do StringGrid.RowCount-2 do
  for i2 := i1 + 1 do StringGrid.RowCount-1 do
    if AnsiSameStr(StringGrid.Cell[x, i1], StringGrid.Cell[x, i2]) < 0 then begin // x = DatumsSpalte ... oder >0 wenn andersrum
      Temp                    := StringGrid.Rows[i1].Text;
      StringGrid.Rows[i1].Text := StringGrid.Rows[i2].Text;
      StringGrid.Rows[i2].Text := Temp;
    end;
PS: Die Methode von hoika nennt sich Delphi-Referenz durchsuchenAnsiSameStr. :angle:

Es ist echt erstaunlich, dass nach über 25 Jahren die VCL immernoch kein halbwegs nutzbares Grid beinhaltet.

DeddyH 24. Jan 2020 06:44

AW: StringGrid nach Uhrzeit sortieren
 
Nur mal so: http://www.bergsoft.net/en-us/product/next-grid

ISMIRSCHLECHT 24. Jan 2020 10:58

AW: StringGrid nach Uhrzeit sortieren
 
Hi,

Memorydatasets gibts in Delphi kostenlos.
TClientdataset !
Also ein entsprechendes TClientdataset backen, füllen und sortieren per Indexfunktion.
Oder:
Die Daten in passende Objekte hauen, diese in eine TObjectlist füllen und über die Methode Sort nach eigenem Gusto sortieren.

Immer Daten (Objektliste / Dataset) und optische Repräsentation trenne !
Immer Daten sortieren, filtern, aggregieren...

hoika 24. Jan 2020 12:04

AW: StringGrid nach Uhrzeit sortieren
 
Hallo,
Zitat:

Es ist echt erstaunlich, dass nach über 25 Jahren die VCL immernoch kein halbwegs nutzbares Grid beinhaltet.
Ja, leider.
WordWrap, inplace Editor, Alignment, merged cells
-> nüx kann das TStringGrid

p80286 24. Jan 2020 21:48

AW: StringGrid nach Uhrzeit sortieren
 
Nach der reinen Lehre sollten Daten von der Anzeige getrennt sein, also sollte das vorhandene Grid reichen.
Wenn dann die Daten dann noch in einer Liste sind, dann kommt/kommen noch Sortierroutine(n) dazu und man hat alles was man braucht.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz