![]() |
StringGrid Zeilen löschen
Hallo,
möchte gerne einzelne Zeilen löschen. Wobei die oberste Zeile (Überschrift) nicht markiert werden soll, wenn das Grid leer ist. Ist das möglich?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i :=StringGrid1.Row to StringGrid1.RowCount-2 do StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+1]); StringGrid1.RowCount := StringGrid1.RowCount - 1 end; |
AW: StringGrid Zeilen löschen
Erste Zeile nicht selektieren:
FixedRows gefällt dir nicht? Und hast du schon OnSelect.... gefunden? (da kann man das auch gleich wieder ändern, was einem nicht gefällt :zwinker:) Tipp, siehe:
Delphi-Quellcode:
MoveRow und DeleteRow sind protected und mußt du dir einfach erstmal nur sichtbar machen, um sie zu nutzen.
procedure TCustomGrid.DeleteRow(ARow: Longint);
begin MoveRow(ARow, RowCount - 1); RowCount := RowCount - 1; end; Ich weiß, es ist bissl schwachsinnig, da der User dieses per Drag&Drop nutzen kann, es aber programmseitig etwas versteckt und standardmäßig nicht direkt zugänglich ist. :stupid: Und sicherheitshalber aufpassen, ob überhaupt etwas selektiert ist. (z.B. Row<0 aka -1) Man beachte auch, dass bei MultiSelekt-Komponenten die "Selection" nicht immer mit dem "Focus" übereinstimmen muß. |
AW: StringGrid Zeilen löschen
Es soll durch einen doppelt Click im StringGrid, die ausgewählte Zeile gelöscht werden.
Außer wenn die erste Zeile doppelt geklickt wird! Wie schütze ich die erste Zeile im Grid?
Delphi-Quellcode:
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var i,j :integer; begin if MessageDlg('Daten wirklich löschen?', mtWarning, [mbyes, mbno], 0) = mrYes then StringGrid1.RowCount := StringGrid1.RowCount - 1; StringGrid1.FixedRows:= 1; StringGrid1.FixedColor := clred; StringGrid1.Cells [1,0] := ' '; StringGrid1.Cells [2,0] := 'Unixzeit'; StringGrid1.Cells [3,0] := 'Address'; StringGrid1.Cells [4,0] := 'Status'; StringGrid1.Cells [5,0] := 'Exit'; StringGrid1.Cells [6,0] := 'Short'; end |
AW: StringGrid Zeilen löschen
Delphi-Quellcode:
So ähnlich würde ich das angehen, ggf. gleich eine eigene Klasse aufbauen.
procedure DeleteStringgridLine(var SG:tstringgrid;sgln: integer);
begin if sgln>Untergrenze_fürs_löschen then begin lösche....... end; end; procedure TForm1.StringGrid1DblClick(Sender: TObject); var stringgridLineNo : integer; begin StringgridLineNo:= wieauchimmermandarankommt; if MessageDlg('Daten wirklich löschen?', mtWarning, [mbyes, mbno], 0) = mrYes then DeleteStringgridLine(StringGrid1,StringgridlineNo); Gruß K-H |
AW: StringGrid Zeilen löschen
Habe hier einen Fehler? StringGrid1 ist doch bekannt!
Delphi-Quellcode:
[dcc32 Fehler] Unit1.pas(45): E2003 Undeklarierter Bezeichner: 'StringGrid1'
procedure DeleteStringgridLine(var SG:tstringgrid;sgln: integer);
begin if sgln > 1 then begin StringGrid1.RowCount := StringGrid1.RowCount - 1; end; end; |
AW: StringGrid Zeilen löschen
Ist ja keine Methode, sondern eine normale Prozedur. Ich würde auch den übergebenen Parameter verwenden
Delphi-Quellcode:
SG.RowCount := SG.RowCount - 1;
|
AW: StringGrid Zeilen löschen
Hallo,
Delphi-Quellcode:
Wenn ich Zeile 5 löschen will, wird trotzdem die letzte Zeile gelöscht.
procedure DeleteStringgridLine(var SG:tstringgrid;sgln: integer);
Einfach RowCount-1 reicht nicht, die Lösung steht aber auch schon weiter oben. oder die hier: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz