Autor Beitrag
NanoWare
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 28.09.02 22:56 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 29.09.02 11:55 
NanoWare hat folgendes geschrieben:
wie kann ich eine ganze zeile hinzufügen, am besten am ende,

Einfach die Eigenschaft RowCount um eins erhöhen:
ausblenden 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: 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:

_________________
Viele Grüße
Jakob
NanoWare Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden Quelltext
1:
for i := RowNumber to Grid.RowCount - 2					

Das sollte auch helfen
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 29.09.02 13:43 
@MathiasSimmack: DU verstehst mich!!!! :D :D :D

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
NanoWare Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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:

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
NanoWare Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 29.09.02 14:15 
Titel: thnx mal wieder ;-)
supi peter, denn DAS hat mein problem gelöst!!