AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Im Stringgrid oben eine neue Zeile einfügen

Ein Thema von Hallo_Thomas · begonnen am 30. Jul 2005 · letzter Beitrag vom 5. Sep 2013
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Im Stringgrid oben eine neue Zeile einfügen

  Alt 31. Jul 2005, 11:47
Hallo yankee,

die Signatur deiner Funktion InsertGridLine() zeigt mir, dass du dir schon etwas mehr Gedanken als ein Anfänger machst. Durch die von dir gewählte Signatur erhöhst du die Wiederverwendbarkeit beträchtlich. Ist doch schade, wenn du dann bei der Implementierung nur die Minimalanforderung von Thomas umsetzt. Deswegen mein Hinweis auf die FixedRows.

Ich glaube ja nicht, dass du vor dem Schreiben deiner Schleife den Quellcode von der Komponente analysiert hast. Solange der accessor für die array property Rows aber TStrings zurückliefert, musst du nach dem black box Prinzip die für das Kopieren vorgesehene Methode Assign() verwenden. Wäre jetzt eine Row wirklich eine Komponente der Klasse TStrings, dann würdest du Zeiger kopieren, wobei der Zeiger auf die letzte Row vernichtet würde und der Zeiger auf die neue Zeile identisch mit dem der Zeile darüber wäre - oder? Ergebnis wäre ein Speicherleck und eine Doppelreferenz der Zeilen index und Succ(index) auf die gleichen Daten. Passiert aber nicht, weil intern die Spaltenwerte erst beim Zugriff zu einer StringList zusammen gezogen werden. Auch der Schreibzugriff ist etwas komplexer als eine bloße Zeigerzuweisung. Also sage ich "Glück gehabt", aber es gilt ja auch "Glück hat nur der Tüchtige" und dann bist du ja auf dem richtigen Weg.

Sonntagsgrüße vom marabu
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#12

Re: Im Stringgrid oben eine neue Zeile einfügen

  Alt 31. Jul 2005, 12:40
@marabu sieht das nicht schon besser aus, für meine Minimalanforderung:


Ich hab jetzt mal versucht die Hinweise umzusetzen, sieht doch besser aus!!

Delphi-Quellcode:
procedure TForm1.insertGridLine(Grid :TStringGrid; index: integer);
var i:integer;
begin
  Grid.RowCount :=Grid.RowCount +1;
  for i :=Grid.RowCount -1 downto index do
  begin
    Grid.Rows[i].Assign(Grid.Rows[i-1]);
    Grid.Rows[i-1].clear;
  end;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Im Stringgrid oben eine neue Zeile einfügen

  Alt 31. Jul 2005, 13:06
Hallo Thomas,

durch das Clear() in der Schleife löschst du alle Spaltenwerte, nachdem du sie in die nächste Zeile kopiert hast - nur um die geleerten Zellen im nächsten Schritt mit den Werten einer anderen Zeile zu überschreiben. Meinst du nicht, es würde ein Row[index].Clear außerhalb der Schleife genügen?

marabu

PS: Und schau dir den Laufbereich für dein i nochmal genau an... (vergleiche mal mit meinem Code)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Im Stringgrid oben eine neue Zeile einfügen

  Alt 31. Jul 2005, 18:02
Hai ihr lieben,

ich kann und möchte jetzt nichtst zu der Frage von H_Thomas sagen

Mir geht es mehr um das "miteinander". Es ist nich immer leicht etwas so zu sagen/schreiben wie man es eigentlich meint.

Darum ja auch meine kleine Kritik an yankee doch bitte etwas höflicher zu sein.
Andererseits könnte die Wortwahl in diesem Thread auch dazu führen das sich jemand als person angegriffen fühlte.

Als DP-Hai möchte ich euch jetzt nur um eines bitten ->

Versucht immer die Aussagen von anderen Usern so zu sehen das sie nie persönlich gegen euch gerichtet sind.
Und auch bei der "Bewertung" von den Code-Beispielen sollte man zurückhaltend sein!

Kritik, im konstruktieven sinne, ist sicher immer erlaubt und auch gewünscht.

Ein Vorschlag von mir *blubb*

Sammelt eure Erkentnisse aus diesem Thread um macht daraus einen Beitrag in der Code-Library.

Naja, meine Linksschreibung ist leider auch nicht besser geworden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
saschi35

Registriert seit: 9. Mär 2013
60 Beiträge
 
#15

AW: Im Stringgrid oben eine neue Zeile einfügen

  Alt 5. Sep 2013, 10:34
HALLO ich habe eine Frage,

ich habe ein stringgrid erstellt, dieses füllt sich nach eingabe meiner edits und mit dem abschluss durch klicken auf einen button.

Beispiel:

NAME ORT DATUM
HALLO HALLO HALLO
.... ..... .....

wie kann ich beim nächsten klick auf den Button nach unten rutschen, sprich der 2 eintrag steht unter dem ersten oder noch besser wäre der 2 eintrag steht über dem 1.

Vielen Dank

Derzeit habe ich es so stehen, aber es funktioniert nicht:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.visible:= true;

//EINGABEN IN LISTE ANZEIGEN//
stringgrid1.cells[1,1]:= e_name.Text;
stringgrid1.cells[2,1]:= e_ort.Text;
stringgrid1.cells[3,1]:= e_stra.Text;
stringgrid1.cells[4,1]:= e_stich.Text;
stringgrid1.cells[5,1]:= e_anz.Text;


stringgrid1.RowCount := stringgrid1.RowCount + 1;
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#16

AW: Im Stringgrid oben eine neue Zeile einfügen

  Alt 5. Sep 2013, 12:24
Zitat:
stringgrid1.cells[1,1]:= e_name.Text;
stringgrid1.cells[2,1]:= e_ort.Text;
stringgrid1.cells[3,1]:= e_stra.Text;
stringgrid1.cells[4,1]:= e_stich.Text;
stringgrid1.cells[5,1]:= e_anz.Text;
Überleg mal: Wofür steht denn die 1 nach dem Komma bei cells[1,1]?

Wenn du immer in die erste Zeile schreibst, wirst due den zweiten Eintrag nie unter den ersten bekommen.

Um einen neuen Eintrag in die erste Zeile zu bekommen und die vorhanden Einträge nach unten zu verschieben musst due eine eigene Routine schreiben, die RowCount erhöht und die Zellinhalte nach unen kopiert.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Im Stringgrid oben eine neue Zeile einfügen

  Alt 5. Sep 2013, 12:27
Man sollte halt Anzeigekomponenten nicht zur Datenspeicherung missbrauchen
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 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