Autor |
Beitrag |
Torsten
      
Beiträge: 160
|
Verfasst: Di 17.12.02 19:36
Moinsen Leute!
Der Titel sagt eigentlich alles. Ich brauche für meine Anwendung ein TStringGrid, in das ich diverse Daten zur Laufzeit einfüge.
Jenes geschieht über ein zweites Fenster.
Um nicht vorhandene Daten zu überschreiben, will ich natürlich die neuen Daten in die erste freie Zeile schreiben. Doch wie ermittle ich jene Zeile?
Über RowCount ist es mir bis dato nicht möglich, da ich beim Start die Anzahl der Zeilen auf 50 setze.
Fragende Grüße
Torsten
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Di 17.12.02 21:25
hallo torsten!
durchlauf einfach das grid von zeile nr 1 bis maximal rowcount-1 (weil rowcount auch die zeile 0 mitzählt) und überprüfe den inhalt auf ein leeres feld. somit hast deine erste leere zeile.
mfg, stefan
|
|
Torsten 
      
Beiträge: 160
|
Verfasst: Mi 18.12.02 00:02
Moinsen!
Danke, so dachte ich mir das auch, nachdem ich den Text geschrieben hatte. Wird wohl klappen.
Dumm ist es nur, wenn zwischen zwei Einträgen eine leere Zeile steht.
Grüße
Torsten
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 00:32
grayfox hat folgendes geschrieben: | von zeile nr 1 bis maximal rowcount-1 (weil rowcount auch die zeile 0 mitzählt) |
Genau deshalb sollte es eher For i := 0 to StringGrid1.RowCount-1 heisen, oder?
Torsten hat folgendes geschrieben: | Dumm ist es nur, wenn zwischen zwei Einträgen eine leere Zeile steht. |
2 Möglichkeiten:
1. Aufpassen, daß sowas nicht vorkommt
2. In einem extra Durchlauf das Grid quasi 'Sortieren' und dabei die Leerzeilen nach hinten schieben.
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mi 18.12.02 00:40
wieso sollte das dumm sein?
beim ersten mal findet er die leere zeile mittendrinnen und beim
nächstenmal suchen überspringt er die beschriebene zeile und trägt sich dort ein.
mfg, stefan
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mi 18.12.02 00:46
hallo wolff86!
es sollte reichen, wenn die schleife bei zeile nr 1 zum testen beginnt, da in der zeile nr 0 gewöhnlich die überschriften stehen und sie ohnehin eine fixed cell ist
das grid sortieren ist auch keine schlechte idee - bei einer grossen anzahl von zeilen kann es aber schon etwas zeitintensiv sein. in diesem fall gilt es eben abzuwägen, was sinnvoller ist.
mfg, stefan
Zuletzt bearbeitet von grayfox am Mi 18.12.02 00:48, insgesamt 1-mal bearbeitet
|
|
Torsten 
      
Beiträge: 160
|
Verfasst: Mi 18.12.02 00:47
Moinsen!
@Wolff68
Naja, sortieren darf nicht sein. Aber so war zunächst auch meine Idee. Mal schauen, was sich da machen lässt.
@grayfox
Und wenn es drei oder x Zeilen gibt, zwischen denen eine oder mehrere leere Zeilen sind? So wie Du hätte ich es auch gemacht. Doch so ermittle ich nicht die erste leere Zeile nach der letzten vollen Zeile.
Anscheinend muss ich es wirklich so einrichten, dass Leerzeilen nicht erlaubt sind.
Grüße
Torsten
|
|
Torsten 
      
Beiträge: 160
|
Verfasst: Mi 18.12.02 00:54
So, ich noch mal.
In die erste leere Zeile eintragen, auch wenn noch eine Zeile folgt, dürfte ausreichen.
Werde mich jedenfalls dazu durchringen.
Grüße
Torsten
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mi 18.12.02 00:57
@torsten
Zitat: |
Und wenn es drei oder x Zeilen gibt, zwischen denen eine oder mehrere leere Zeilen sind?
|
dann ist es auch kein problem, da du ja jedesmal bevor du was ins grid einträgst, eine leere zeile suchst. klar?
mfg, stefan
|
|
Torsten 
      
Beiträge: 160
|
Verfasst: Mi 18.12.02 01:02
Jaja, schon klar.
Aber das war nicht die gesuchte Lösung. Somit trägt man in die erste gefunden leere Zeile ein. Ist ja im Prinzip auch ok.
Doch ich meinte die erste leere Zeile nach der letzten vollen Zeile.
Ist aber egal, habe mich nun umentschieden.
Grüße
Torsten
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mi 18.12.02 01:08
Zitat: | Doch ich meinte die erste leere Zeile nach der letzten vollen Zeile. |
dann dreh die schleife um und beginn bei rowcount-1 nach einer leeren zelle zu suchen - dann bist immer in der ersten freie zeile am schluss
mfg, stefan
|
|
Torsten 
      
Beiträge: 160
|
Verfasst: Mi 18.12.02 01:29
Gute Idee.
Damit bekomme ich die erste leere Zeile von unten gesehen. Also wahrscheinlich die letzte Zeile.
Die Idee ansich ist aber nicht übel.
Ich kann ja von unten die erste volle Zeile suchen. Nehme den Kram -1 und habe die gewünschte Zeile (solange es zuvor nicht die letzte Zeile war).
Grüße
Torsten
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mi 18.12.02 01:39
oops...
Zitat: |
... beginn nach der ersten nichtleeren zeile von unten zu suchen... |
hätts werden sollen  naja, die hektik!  )
na hoffentlich sind jetzt alle unklarheiten beseitigt! *g*
mfg, stefan
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 21:08
Meld mich nochma wegen dem Sortieren.
- Ist hier die Rede von gerade mal 50 Zeilen.
- Meinte ich nicht richtig sortieren. Deshalb auch "quasi Sortieren" Ich dachte eher daran einen Sortieralgorithmus entsprechend anzupassen. Du suchst einfach eine leere Zeile und schiebst sie nachhinten. Oder man liest die Zeilen durch und setzt sich einen Integer FirstLeer auf die erste leere Zeile. Wenn man dann bei weiterem lesen auf eine gefüllte stößt, setzt man den Ihnalt in die leere Zeile und macht ein Inc(FirsLeer). Sollte eigentlich relativ schnell gehen.
Am besten ist natürlich wie gesagt gleich zu verhindern, daß Lücken entstehen.
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Torsten 
      
Beiträge: 160
|
Verfasst: Mi 18.12.02 21:10
Moinsen!
Besten Dank für die Antwort.
Sehr scön, so kann man es natürlich auch machen. Ich werde aber verhindern, dass man Zeilen überspringen kann.
Grüße
Torsten
|
|