Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   neue Zeile im StringGrid -> Datum wird in allen Zeilen neu geschrieben :-( (https://www.delphipraxis.net/178141-neue-zeile-im-stringgrid-datum-wird-allen-zeilen-neu-geschrieben.html)

Alterauge 19. Dez 2013 15:37


neue Zeile im StringGrid -> Datum wird in allen Zeilen neu geschrieben :-(
 
hallo,

möchte gerne im StringGrid eine neue Zeile hinzufügen.
Bin gerade schon am testen, komme leider nicht weiter!


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
begin
 i := stringgrid1.RowCount;
  Stringgrid1.RowCount := i+1;
  StringGrid1.Cells[0,StringGrid1.RowCount-i]:= IntToStr(i);
  StringGrid1.Cells[1,StringGrid1.RowCount-i]:= '' + DateToStr(Date)+ '';
  StringGrid1.Cells[2,StringGrid1.RowCount-i]:= '' + TimeToStr(Time)+ '';
end;

baumina 19. Dez 2013 15:39

AW: eine neue Zeile im StringGrid oben
 
http://www.delphipraxis.net/50731-im...einfuegen.html

Alterauge 19. Dez 2013 16:11

AW: eine neue Zeile im StringGrid oben
 
hallo baumina,

wieso ändert sich das Datum in allen Zeilen ?

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
begin
 i := StringGrid1.RowCount;
  Stringgrid1.RowCount := i+1;
  for i := 1 to StringGrid1.RowCount-1 do begin
  StringGrid1.Cells[0,StringGrid1.RowCount-i]:= IntToStr(i);
  StringGrid1.Cells[3,StringGrid1.RowCount-i]:= (FormatDateTime('hh:nn:ss',now));
 end;
end;

Was ist hier noch falsch?

Volker Z. 20. Dez 2013 01:38

AW: neue Zeile im StringGrid -> Datum wird in allen Zeilen neu geschrieben :-(
 
Hallo,

Zitat:

wieso ändert sich das Datum in allen Zeilen ?
Wenn Du über alle (nicht fixe) Zeilen Deines StringGrids iterierst und den Zellenwert überschreibst, dann hat das so schon seine Richtigkeit - oder nicht?
Zitat:

Was ist hier noch falsch?
Leider kann ich anhand Deines Codefragments nicht so richtig erkennen was Du eigentlich erreichen möchtest; wenn Du lediglich eine weitere Zeile "als erste Zeile" im StringGrid hinzufügen möchtest, dann vielleicht so (aber da hätte Dir bauminas Link eigentlich schon weiterheften müssen):
Delphi-Quellcode:
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
  for i := StringGrid1.RowCount - 1 downto StringGrid1.FixedRows + 1 do
    StringGrid1.Rows [i].Assign (StringGrid1.Rows [i - 1]);

  StringGrid1.Rows [StringGrid1.FixedRows].Clear;
  StringGrid1.Cells [3, StringGrid1.FixedRows] := FormatDateTime ('hh:nn:ss', Now)
end;
Delphi-Quellcode:
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
"Hängt" eine neu (leere) Zeile am Ende des StringGrids ein - mehr nicht. Es werden keine Zelleninhalte verschoben oder ähnliches. Mit:
Delphi-Quellcode:
  for i := StringGrid1.RowCount - 1 downto StringGrid1.FixedRows + 1 do
    StringGrid1.Rows [i].Assign (StringGrid1.Rows [i - 1]);
"Schieben" wir nun die Inhalte der entsprechenden Zeilen nach unten. Ein:
Delphi-Quellcode:
  StringGrid1.Rows [StringGrid1.FixedRows].Clear;
stellt sicher, dass die Spalten der ersten Zeilen allesamt "leer" sind. Und: Mit:
Delphi-Quellcode:
  StringGrid1.Cells [3, StringGrid1.FixedRows] := FormatDateTime ('hh:nn:ss', Now)
füllen wir die entsprechende Zelle mit dem gewüschten Wert.
Gruß

Sir Rufo 20. Dez 2013 02:24

AW: neue Zeile im StringGrid -> Datum wird in allen Zeilen neu geschrieben :-(
 
Genau wegen diesem Rumgehampel sollte man die Controls auch nicht als Datenspeicher missbrauchen.

Trennt man das, dann wird diese Aufgabe zur Lachnummer:
  • Man nehme eine Liste (z.B. TList<TMyItem>) und merke sich dort die Daten.
  • Man erstelle eine Methode, die diese Datenliste in einem StringGrid darstellt
Nun in der Liste an beliebig gewünschter Stelle einen neuen Eintrag hinzufügen und die Methode aufrufen.

Das ist dann KISS

Perlsau 20. Dez 2013 04:26

AW: neue Zeile im StringGrid -> Datum wird in allen Zeilen neu geschrieben :-(
 
In einem einfachen Testprojekt (für ein Anfänger-Tutorial) habe ich einen Record mit verschiedenen Feldern für Name, Adresse usw. Alle Manipulationen finden in diesem Record statt. Zur Anzeige in einem Stringgrid dient mir folgende Procedure:
Delphi-Quellcode:
Procedure TFormMain.Eintragen(Nummer: Integer);
begin
  IF Anzahl < Nummer THEN Exit;
  IF (StrGrid_Adressen.RowCount - 1) < Nummer THEN
     StrGrid_Adressen.RowCount := Nummer + 1;

  StrGrid_Adressen.Cells[0,Nummer] := IntToStr(Adressen[Nummer].Index);
  StrGrid_Adressen.Cells[1,Nummer] := Adressen[Nummer].Vorname;
  StrGrid_Adressen.Cells[2,Nummer] := Adressen[Nummer].Nachname;
  StrGrid_Adressen.Cells[3,Nummer] := Adressen[Nummer].Strasse;
  StrGrid_Adressen.Cells[4,Nummer] := Adressen[Nummer].PLZ;
  StrGrid_Adressen.Cells[5,Nummer] := Adressen[Nummer].Ort;
  StrGrid_Adressen.Cells[6,Nummer] := DateTimeToStr(Adressen[Nummer].GebDat);
end;
Damit befolge ich das KISS-Prinzip. Das Tutorial ist dort zu finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.

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