Daten aus Stringgrid

Rund um die LCL und andere Komponenten
Antworten
SME
Beiträge: 3
Registriert: Sa 17. Aug 2013, 18:41

Daten aus Stringgrid

Beitrag von SME »

Hallo,

ich möchte aus einer Stringgrid Daten auslesen.
am einfachsten erkläre ich meine Situation wohl an einem Beispiel:
1 .. 5 .. 6
2 .. 7 .. 8
3 .. 9 .. 12
4 .. 11.. 20
Sei das meine tabelle. nun will ich zu meinem wert in der ersten Spalte den Wert der 2. und 3. wissen. Wenn ich also die 2 habe, möchte ich an die 7 und an die 8 kommen (3-> 9 und 12; etc.)

Es muss nicht zwangsweise eine Stringgrid sein, wenn jemand also eine elegantere Lösung weiß, wäre das auch toll.
Wenn mir bei diesem Problem jemand weiterhelfen könnte, würde ich mich sehr freuen.

Mit freundlichen Grüßen

SME

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: Daten aus Stringgrid

Beitrag von theo »

Normalerweise mit Bspw:

Code: Alles auswählen

MeinString:=StringGrid1.Cells[2,1];   


Oder meinst du was anderes?

SME
Beiträge: 3
Registriert: Sa 17. Aug 2013, 18:41

Re: Daten aus Stringgrid

Beitrag von SME »

hallo theo,

ja, an sich schon. allerdings (war an meinem beispiel leider falsch) habe ich nicht vorne 1,2,3,4,..., sondern 3,4,5,6,8,10,12,16,.... und ich will nur diesen wert vorgeben und dann aus der gleichen Zeile die beiden anderen werte auslesen (ergebnis1:=StringGrid1.Cells[i,k]). ich müsste also herausfinden, in welcher zeile die 8 oder die 16/... steht.
Da liegt mein derzeitiges Problem

Danke

SME

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Daten aus Stringgrid

Beitrag von Michl »

Meinst du so???

Code: Alles auswählen

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  Caption:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];  //aktuelle Spalte, aktuelle Zeile
end;
der nächste Eintrag auf der Zeile wäre dann "StringGrid1.Cells[StringGrid1.Col + 1,StringGrid1.Row]"

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Daten aus Stringgrid

Beitrag von Socke »

SME hat geschrieben:ich müsste also herausfinden, in welcher zeile die 8 oder die 16/... steht.

Code: Alles auswählen

  StringGrid1.Cols[1].IndexOf('8');
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

SME
Beiträge: 3
Registriert: Sa 17. Aug 2013, 18:41

Re: Daten aus Stringgrid

Beitrag von SME »

vielen Dank für eure antworten, sie haben mir schon echt weitergeholfen

aber irgendwie löst es bei mir regelmäßig eine Exception aus, dass der WErtebereich verletzt wurde.
ich habe schon echt ein bisschen rumprobiert, komm aber nicht weiter. muss wohl damit zusammenhängen, wie Lazarus die Zeilen/Spalten zählt.


die Meldung kam, als ich nach (Nenn)D =5 gesucht habe:

exception-Klasse >>EGridException<< mit der meldung:
index out of range Cell[col=-1 row=3]

hier mal mein Code und im anhang ein Bild der Tabelle.

nRow := form_mase.StringGrid1.Cols[2].IndexOf(floattostr(D));
P := strtofloat(form_mase.StringGrid1.cells[nRow,3]);
d_2 := strtofloat(form_mase.StringGrid1.cells[nRow,4]);
d_3 := strtofloat(form_mase.StringGrid1.cells[nRow,5]);


vielen Dank im Voraus
SME
Dateianhänge
Unbenannt.PNG
Unbenannt.PNG (5.94 KiB) 1278 mal betrachtet

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Daten aus Stringgrid

Beitrag von Michl »

Bitte Highlighter "Freepascal/Lazarus" für Code benutzen!!!

Eigentlich sagt die Exception schon, was nicht funktioniert: Ein Zugriff auf Col=-1 ist nicht möglich! Cols und Rows haben einen Bereich von 0..X!

Damit kommt schon das nächste Problem: Wenn du nach der Zeile, wo NennD=5 ist suchst und dein Bild die StringGrid darstellt muss der Code wie folgt lauten:

Code: Alles auswählen

nRow := form_mase.StringGrid1.Cols[1].IndexOf(floattostr(D));
Cols[1] statt Cols[2]! Daher hat dein Programm auch in der falschen Spalte gesucht und konnte den Eintrag nicht finden -> Rückgabe Index von "-1"!

Zugriffe auf die Spalte/Zeile sind verdreht:

Code: Alles auswählen

P := strtofloat(form_mase.StringGrid1.cells[2,nRow]);
Erst kommt Col, dann Row!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten