TStringGrid zur nächsten Zeile springen
-
Hallo,
ich füge in ein TStringGrid Eingaben aus Textboxen usw ein
StringGrid1->Cells[0][1] = MaskEdit1->Text; StringGrid1->Cells[1][1] = MaskEdit2->Text; StringGrid1->Cells[2][1] = MaskEdit3->Text; StringGrid1->Cells[3][1] = ComboBox1->Text; StringGrid1->Cells[4][1] = ComboBox2->Text; StringGrid1->Cells[5][1] = MaskEdit4->Text;Da habe ich ja die angabe der Zeile in die geschrieben wird mit ner statischen Zahl versehen.
Nun möchte ich es aber so hinbekommen, das wenn ich nen zweites mal auf den hinzufügen button klicke das der in die nächste leere Zeile springt und den Datensatz dort einfügt
-
Auf welchen Hinzufügebutton?
Da habe ich ja die angabe der Zeile in die geschrieben wird mit ner statischen Zahl versehen.
Nein, es wird der String aus dem Editfeld in die Zelle geschrieben.
Welche nächste leere Zeile? Hast du ein Grid mit 10000 leeren Zeilen auf Vorrat? Üblicherweise erzeugt man eine neue Zeile bei Bedarf
Da hier keiner dein Konzept kennt, sollte es erläutert werden
-
Hallo,
also ich habe ein neues Form erstellt und darin ein tStringGrid mit 6 Spalten und 1 Zeile als Überschrift und zusätlich noch eine Zeile wo ich den ersten Datensatz immer reingeschrieben habe.
Dann gibt es noch 6 Eingabefelder und einen Hinzufügen Button.
Wenn man auf den Hinzufügen Button klickt sollen die Daten dem TStringGrid hinzugefügt werden
Den Quelltext den ich bis jetzt hatte steht ja oben
Die Anregung von dir das eine Zeile normal hinzugefügt wird hab ich so noch garnicht bedacht. Hab gerade mal in der Borland hilfe rumgesucht aber dort keinen Befehl zum hinzufügen einer Zeile gefunden
-
Hallo
Mit der Eigenschaft TStringGrid::RowCount kannst du auslesen wie viele Zeilen das StringGrid hat, und die Anzahl ändern (vergrößern).
Wenn du allerdings schon vo nAnfang an leere Zeilen hast, must du intern verfolgen wieviele echte Datensätze schon eingetragen wurde, um die nächste leere Zeile zu bestimmen bzw. eine neue Zeile anzufügen.bis bald
akari
-
das mit der leeren zeile kann ich ja auch ändern das ich keine habe.
zählen die zeilen die man als FixedRow definiert hat auch dazu? Da hab ich eine für die Überschrift...
-
Hallo
ja FixedRows zählen auch dazu.
bis bald
akari
-
ok. hab das erstmal weggelassen mit den Überschriften.
Hab das jetzt hinbekommen mit TStringGrid::RowCount die Anzahl der Zeilen zu bestimmen. Da gibt der mir ne 1 aus. Weil eine zeile muss ja immer da drinnen sein.
Wie füge ich jetzt eine neue zeile hinzu mit meinem Daten?
edit: ok habe es. hab jetzt nur noch das problem das die erste zeile im TStringGrid leer ist
-
hinzufügen kannst du es mit
RowCount++und dann wie gewohnt deine daten reinschreiben
-
jo funktioniert jetzt alles.
Als nächsten Schritt möchte ich jetzt ne kommaseparierte Liste einlesen...
-
kann das Gird nicht -> selbst progammieren
Datei öffnen, Zeile lesen,neue Gridzeile, aufteilen, den Zellen zuordnen.
Das kann beim aufteilen helfen:
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_01.html
-
jede Reihe oder Spalte eines Stringgrid ist vom Typ TStrings und die beherrschen alle CommaText, Delimiter und DelimitedText
d.h. folgendes sollte funktionieren
StringGrid1->Rows[1]->CommaText = "Heute,Gestern,Morgen";[Edit]geht allerdings erst ab BCB6
-
ne funktioniert auch mit der 5 version
hab das jetzt so probiert
TStringList* tmpList = new TStringList; tmpList->LoadFromFile("C:\Mappe1.csv"); StringGrid1->Rows[1]->CommaText = tmpList;Bekomme jetzt folgende Fehlermeldung:
[C++ Fehler] Unit1.cpp(56): E2034 Konvertierung von 'TStringList *' nach 'AnsiString' nicht möglich
-
Hallo
Die Fehlermeldung ist doch eindeutig
StringGrid1->Rows[1]->CommaText = tmpList->Text;bis bald
akari
-
ok danke geht so.
aber den lösungsansatz kann ich doch nicht verwenden. Die Datensätze sind leider durch ; getrennt und nicht durch ,
-
ich empfehle das du oben noch mal nachschauen solltest... oder die hilfe vom bcb nutzt und mal "DelimitedText" eingibst... da siehst du das was du brauchst... is das selbe wie commatext nur das du die zeichen selber definieren kannst...
cya
da vo
-
dann den Delimiter auf ; setzen und DelimitedText verwenden
-
Du kannst ja mit StringReplace vorher die Semikolons durch Kommas ersetzen. Ab dem BCB6 kann man das Trennzeichen auch selbst bestimmen (Separator).
-
ok. danke. hab das ganze jetzt auf kommas umgestellt. leuft jetzt
aber ich hab da ja mehr als einen datensatz drinnen. jetzt muss ich ja irgendwie zählen wieviele das sind in der datei oder?
Danke für eure geduld

-
Gibt so Grundprinzipen in der EDV. Beim lesen aus Dateien:
Vorlesen
Prüfung (EOF)
verarbeiten
weiterlesen
zur Prüfung
nachverarbeitenIm "Verarbeiten" machst du dein schieben ins Grid und eine Zählung
-
du solltest wirklich mal anfangen die BCB-Hilfe und die FAQ zu nutzen
z.B. diese Thema aus der FAQ, einfach an deine Bedürfnisse anpassen
oder die BCB-Hilfe zu TStringList (z.B. die Eigenschaft Count) und die diversen Beispielehier noch ein nützlicher Link: Hilfe benutzen
-
jo. hab die hilfe mal benutzt. und es leuft sogar jetzt fast.
Der ließt alle Datensätze (3 Stück) ein und schreibt die ins TStringGrid
Nur nachdem der Die eingelesen hat bekomme ich noch folgende Meldung:
Der Index der Liste überschreitet das Maximum(3)
Kann damit irgendwie nichts anfangen. Ich denke da wird irgendwo nen fehler in meiner schleife sein
int zeilen; TStringList* tmpList = new TStringList; tmpList->LoadFromFile("C:\\hallo.csv"); zeilen = tmpList->Count; for (int y = 0; y <= zeilen; y++) { int j = StringGrid1->RowCount; StringGrid1->Rows[j-1]->CommaText = tmpList->Strings[y]; StringGrid1->RowCount += 1;