Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TStringgrid (anfängerfragen)
NanoWare - Sa 28.09.02 22:56
Titel: TStringgrid (anfängerfragen)
Hallöschen, ich arbeite grad nen bisserl mit dieser vcl, aber ich hab da mal ein paar fragen...(anfängerfragen)
erstens:
wie kann ich eine ganze zeile hinzufügen, am besten am ende, muss nicht sortiert sein für meine zwecke....
achja, die zeile enthällt etwa 5 spalten... falls das hilft
zweitens:
wie kann ich die angewählte zeile löschen (auch wenn nur eine zelle angewählt ist) achja, die zeile löschen, nicht den inhalt der zellen
drittens:
wie kann ich aus der angewählten zelle die daten auslesen, und danach die daten wieder reinschreiben? ich kenne nur die variante mit "cell" um die zelle zu füllen, aber gibt es noch eine elegantere version?
gut, ich habe natürlich auch in die hilfe geschaut und auch hier gesucht, aber irgendwie nix gefunden... wäre euch echt dankbar wenn ihr da was für mich hättet
gruss und danke schon mal fürs lesen ;-)
Tino - So 29.09.02 11:55
Titel: Re: TStringgrid (anfängerfragen)
NanoWare hat folgendes geschrieben: |
wie kann ich eine ganze zeile hinzufügen, am besten am ende, |
Einfach die Eigenschaft
RowCount um eins erhöhen:
Quelltext
1:
| StringGrid1.RowCount := StringGrid1.RowCount +1; |
NanoWare hat folgendes geschrieben: |
wie kann ich die angewählte zeile löschen (auch wenn nur eine zelle angewählt ist) achja, die zeile löschen, nicht den inhalt der zellen |
Also wenn Du die ganze Zeile löschen möchtest dann gehen auch die Inhalte der Zellen verloren! Leider gibt es beim StringGrid keine fertige Methode zum löschen einer ganzen Zeile nicht.
Diesen Sourcecode habe ich irgendwo im Netz gefunden. Hab Ihn auch noch nicht getestet:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure GridDeleteRow (RowNumber: Integer; Grid: TstringGrid); var i: Integer; begin Grid.Row := RowNumber; if (Grid.Row = Grid.RowCount - 1) then { On the last row} Grid.RowCount := Grid.RowCount - 1 else begin { Not the last row} for i := RowNumber to Grid.RowCount - 1 do Grid.Rows[i] := Grid.Rows[i + 1]; Grid.RowCount := Grid.RowCount - 1; end; end; |
NanoWare hat folgendes geschrieben: |
wie kann ich aus der angewählten zelle die daten auslesen, und danach die daten wieder reinschreiben? ich kenne nur die variante mit "cell" um die zelle zu füllen, aber gibt es noch eine elegantere version? |
Mit der Eigenschaft
Cell kannst Du die Zellen lesen und wieder beschreiben. Eine elegantere Möglichkeit kenne ich nicht. Warum auch? Funktioniert so ja bestens :-D
Gruß
TINO
Christian S. - So 29.09.02 12:25
Hi!
@Tino: Dein Source-Code könnte einen Fehler produzieren. Wenn er die For-Do-Schleife durchläuft, wird er versuchen, die letzte Zeile (i = RowCount -1) mit einer weiteren Zeile zu füllen, die jedoch nicht vorhanden ist!
MfG,
Peter
DeCodeGuru - So 29.09.02 13:19
dem dürfte man aber vorbeugen, wenn man von der Anzahl der Zeilen runter zu 0 zählt. Oder habe ich das das Prob nicht so ganz verstanden :mrgreen:
NanoWare - So 29.09.02 13:24
Titel: thanx
hey, schon mal danke für eure hilfe, hab grad mal wieder angefangen zu proggen und bis jetzt läuft das zumindest ganz gut... naja, mit dem zeilen löschen bin ich noch nit dran, werd mich aber melden wenn das nit funzt...
:lol:
Delete - So 29.09.02 13:38
DeCodeGuru hat folgendes geschrieben: |
dem dürfte man aber vorbeugen, wenn man von der Anzahl der Zeilen runter zu 0 zählt. Oder habe ich das das Prob nicht so ganz verstanden :mrgreen: |
Oder die Schleife so gestaltet:
Quelltext
1:
| for i := RowNumber to Grid.RowCount - 2 |
Das sollte auch helfen
Christian S. - So 29.09.02 13:42
Hi!
@DecodeGuru: jetzt weiß ich nicht, ob ich dich ganz verstanden habe. Was ich meinte, war: wenn i = RowCount-1 ist und er dann eine Zuweisung mit i+1 vornimmt, wird er eine Zeile mit dieser Nummer nicht finden. Das führt zu einem Fehler.
MfG,
Peter
Christian S. - So 29.09.02 13:43
@MathiasSimmack: DU verstehst mich!!!! :D :D :D
NanoWare - So 29.09.02 13:53
Titel: prob gefunden
ich hab da grad noch ein problem gefunden, und ich hoffe ihr könnt mir da auchnoch weiterhelfen...
problem ist das wenn ich eine zelle auswähle, dann soll der mir von der ganzen row die werte wieder in ein edit-feld auslesen... ich habe das mal so gemacht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var row_tmp : integer; begin row_tmp:=stringgrid2.Row; labelededit2.Text:=stringgrid2.Cells[0,row_tmp]; labelededit3.Text:=stringgrid2.Cells[1,row_tmp]; labelededit4.Text:=stringgrid2.Cells[2,row_tmp]; labelededit5.Text:=stringgrid2.Cells[3,row_tmp]; if stringgrid2.Cells[4,row_tmp] ='Nein' then radiobutton1.Checked:=true else if stringgrid2.Cells[4,row_tmp] ='Aktiv' then radiobutton2.Checked:=true else if stringgrid2.Cells[4,row_tmp] ='Inaktiv'then radiobutton3.checked:=true; end; |
aber dabei spinnt der irgendwie, denn wenn ich jetzt mal 3 rows erstelle in meinem prog, und dann den ersten davon anklicke, dann liest der mir
die daten vom 3. aus, wenn ich den 2. anklicke dann liesst der mir die daten von der 1. aus, und wenn ich dann auf den 3.klicke dann liest der mir die daten von der zweiten row aus....
achja, ich habe eine horizontale fixed row, wo die spaltenbezeichnungen drin stehen... wenn euch das was hilft....
Christian S. - So 29.09.02 13:59
Hi!
Delphi Hilfe hat folgendes geschrieben: |
Occurs before a cell in the grid is selected.
|
Das schreibt die Delphi-Hilfe zum OnSelectCell-Ereignis. Das heißt, die Eigenschaft Row ist nicht unbedingt die Zeile, die Du anklickst. Versuch es mal über ARow. Das
könnte Dein Problem lösen.
MfG,
Peter
NanoWare - So 29.09.02 14:15
Titel: thnx mal wieder ;-)
supi peter, denn DAS hat mein problem gelöst!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!