Announcement

Collapse
No announcement yet.

StringGrid nach Datum sortieren?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StringGrid nach Datum sortieren?

    Hallo,
    hat jemand vielleicht eine Idee wie ich eine Stringgrid nach Datum sortieren kann? Ich hab in der StringGrid 3 Spalten, eine davon enthält jeweils einen Datumswert. Wie kann ich die Reihen nach dem Datum sortieren?
    mfg
    Axel Steiner

  • #2
    Hallo Axel, ich habe zwar keine Ahnung von Delphi, aber von C und Java, vermutlich funktioniert es ähnlich:
    Innerhalb der Sortierfunktion den String auf date casten - jetzt lässt es sich problemlos sortieren. Wenn du das aus irgendeinem Grunde nicht willst, bleibt die umständliche Möglichkeit via char-array die zahlen einzeln auszulesen, zusammenzufassen (pärchenweise) und zu sortieren - aber schön aufpassen, dass das datum dabei nicht "zerrupft" wird.
    Gruß
    chri

    Comment


    • #3
      Hallo Axel,
      ich gebe dir hier ein lauffähiges Beispiel. Ich habe es extra einfach gemacht. Du kannst statt der Listbox auch ein
      MyList := TStringList.Create; nehmen.

      <pre>
      procedure TForm1.Button3Click(Sender: TObject);
      var
      i:Integer;
      tmpDatum: TDate;
      tmpString: String;
      j,m,t: Word;
      begin
      Listbox1.clear;
      for I := 1 to (Stringgrid1.RowCount-1) do begin
      if StringGrid1.Cells[1,i] = '' then break;
      tmpDatum := StrToDate(StringGrid1.Cells[1,i]);
      tmpString := FormatDateTime('YYYYMMdd',tmpDatum);
      Listbox1.Items.Add(tmpString);
      end;
      {Sortiere die Liste}
      Listbox1.Sorted := true;

      {Zurückschreiben der Werte in das Stringgrid}
      for I := 1 to (Listbox1.Items.Count-1) 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[1,i] := DateToStr(tmpDatum);
      end;
      end;
      </pre>

      mfg Klaus-Pete

      Comment


      • #4
        Hallo Axel,

        hier ein übersichtliches Beispiel. Effektiver geht es auch mit TStringList.

        <pre>
        procedure TForm1.Button2Click(Sender: TObject);
        var
        i: Integer;
        begin
        randomize;

        with Stringgrid1 do begin
        for i := 1 to RowCount do begin
        Cells[1,i] := DateToStr(date+random(50));
        end;
        end;
        end;
        <br><br>
        procedure TForm1.Button3Click(Sender: TObject);
        var
        i:Integer;
        tmpDatum: TDate;
        tmpString: String;
        j,m,t: Word;
        begin
        Listbox1.clear;
        for I := 1 to (Stringgrid1.RowCount-1) do begin
        if StringGrid1.Cells[1,i] = '' then break;
        tmpDatum := StrToDate(StringGrid1.Cells[1,i]);
        tmpString := FormatDateTime('YYYYMMdd',tmpDatum);
        Listbox1.Items.Add(tmpString);
        end;

        {Das Leeren des Grids dient nur der Übersichtlichkeit, ansonsten
        können die Daten überschrieben werden.}
        for I := 1 to (Stringgrid1.RowCount) do
        StringGrid1.Cells[1,i] := '';

        {Sortiere die Liste}
        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[1,i] := DateToStr(tmpDatum);
        end;

        end;
        </pre>

        mfg Klaus-Pete

        Comment

        Working...
        X