Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StrinGrid nach Datum sortieren (https://www.delphipraxis.net/4912-stringrid-nach-datum-sortieren.html)

dopeline 16. Mai 2003 14:54


StrinGrid nach Datum sortieren
 
Hallöle!
ich hab ja auch schon eine möglichkeit gefunden! doch, wenn man in der zu sortierenden spalte in einer zelle kein datum eingegeben hat, bricht er das programm ab und sagt " '' ist kein gültiges Datum"
hier ist erst mal der code:
Delphi-Quellcode:
procedure TFormHaupt.Geburtstag1Click(Sender: TObject);
var i:Integer;
    tmpDatum: TDate;
    tmpString: String;
    j,m,t: Word;
begin

  for I := 1 to (Stringgrid1.RowCount-1) do begin
        if StringGrid1.Cells[8,i] = '' then break;
        tmpDatum := StrToDate(StringGrid1.Cells[8,i]);
        tmpString := FormatDateTime('YYYYMMdd',tmpDatum);
        Listbox1.Items.Add(tmpString);
  end;
   begin
  {Sortiere die Liste}
  for I := 1 to (Stringgrid1.RowCount) do StringGrid1.Cells[8,i] := '';

  Listbox1.sorted := true;

  {Zurückschreiben der Werte in das Stringgrid}
  for I := 1 to (Listbox1.Items.Count) do begin
        j := StrToInt(copy(Listbox1.Items[i-1],1,4));
        m := StrToInt(copy(Listbox1.Items[i-1],5,2));
        t := StrToInt(copy(Listbox1.Items[i-1],7,2));
        tmpDatum := Encodedate(j,m,t);
        StringGrid1.Cells[8,i] := DateToStr(tmpDatum);
  end;
end;
wie sage ich, dass er die leeren felder "nicht beachteb" soll?

Güße, dopeline :wink:

PS: Hier habe ich das mit dem Sortieren her

Stanlay Hanks 16. Mai 2003 14:58

'' is ja auch kein gültiges Datum. Vielleicht baust du noch ne art sicherung ein: Er soll das ganze nur machen, wenn die gerade untersuchte Zelle nicht lehr is (<> '')

Man liest sich, Stanlay 8)

dopeline 16. Mai 2003 15:11

und da ist noch ein progblem...
wenn ich auf "nach geburtstag soriteren" klicke, funktioniert das ja alles, er ordnet die daten absteigend... doch wenn ich das 2. mal auf sortieren klicke, nimmt er das datum der obersten zeile, und schreibt es auch in die 2. zeile (und genauso mit den anderen daten--> verdoppelt). beim drittenmal klicen, hab ich dann schon 4x das gleichedatum bei 4 verschiedenen einträgen. wenn ich also 20x klicke, hab ich die gesamte tabelle mit ein und dem gleichen datum gefüllt...
woran liegt das? da muss sich dorch irgentwo im quelltext (oben) ein fehler eingeschlichen haben...

Grüße, dopeline :wink:

dopeline 16. Mai 2003 15:30

oh! :o
hab das problem mit den doppelten daten gefunden: bei jeden mal klicken auf sortieren wurden die einträge ins listview geschrieben (aber nicht überschrieben) dadurch summierten sie die einträge!
Lösung:(Beim aufrufen der prozedur)
Delphi-Quellcode:
Listbox1.Clear;
Grüße, dopeline

dopeline 16. Mai 2003 15:43

also wenn stanleys methode funktioniert, bricht er das sortieren ab, wenn er in einer zelle kein datum findet...
wie aber bringe ih ihm bei, dass er diese gewissen zellen "auslässt/überspringt" ?

Grüße, dopeline :wink:

Stanlay Hanks 16. Mai 2003 15:45

Er muss sie ja nicht auslassen, er muss sie ja an den Schluss schreiben.

dopeline 16. Mai 2003 15:48

oh gott! und das fällt mir jetzt erst auf :roll:

wenn ich nach datum ordne, ordnet er wirklich nur die spalte mit dem datum. er soll doch aber alle zeilen anhand des datums ordnen!!! jede zeile ist ein eintrag (name, adresse, telefon,...,Geburtstag). ich klicke nach "Geburtstag" sortieren und er sortiert zwar den geburtstag richtig aber die anderen zeilen dafür nicht mit. im endeffekt hat heinz krause nach dem sortieren an einem anderen tag geburtstag... :freak:

dopeline

Stanlay Hanks 16. Mai 2003 16:23

Das is natürlich nicht so günstig....du kannst ja nich einfach Geburtstage verlegen :mrgreen: Abe rich denke, das lässt sich relativ schnell anpassen, oder?

dopeline 16. Mai 2003 16:56

:shock: ich habe keinen blassen schimmer, wie ich das anstellen soll... :oops: :cry:

Gruß, dopeline :(

Stanlay Hanks 16. Mai 2003 17:21

Du hast doch den Inhalt der Zellen in die Variablen geschrieben um sie später wieder zu verschieben, das gleiche machst du einfach nochmal nur mit einer anderen Spaltenangabe.

Man liest sich, Stanlay :bounce1:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 1 von 2  1 2      

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