TStringgrid : DeleteRow

Für Fragen von Einsteigern und Programmieranfängern...

TStringgrid : DeleteRow

Beitragvon malabarista » 22. Mär 2017, 11:52 TStringgrid : DeleteRow

Ich habe ein TStringgrid mit 6 Spalten und mehreren Zeilen (=mehr als zwei).
Über die Zahl in der 6.Spalte wird die Reihenfolge der Anzeige der einzelnen Zeilen gesteuert: es ist die Positionsangabe.

Wenn beim Editieren einer Zelle in der 6.Spalte eine 0 eingegeben wird, wird diese Zeile mittels DeleteRow gelöscht.

Wenn dies die letzte Zeile in diesem TStringgrid ist, wird anschliessend aber nur noch die ehemals (=vor dem Löschen) vorletzte Zeile angezeigt.
Die anderen Zeilen fehlen in der Anzeige.
Konkretes Beispiel: ich habe vier Zeilen und gebe in der letzten die 0 ein. Anschliessend wird nur die Zeile 3 angezeigt, obwohl die Zeilen 1 und 2 noch vorhanden sind.

Ein interner Testausdruck zeigt aber, dass die anderen Zeilen vorhanden sind und auch der rowCount korrekt ist.
Nur die Anzeige stimmt nicht.

Wenn ich dagegen eine andere Zeile als die letzte auf diese Art lösche, ist die Anzeige immer korrekt.

Code: Alles auswählen
 
procedure TFrezpos.onedit_fertig(Sender: TObject);
 
var
  col,row:integer;
  i:integer;
  y:integer;
 
begin
  col:=liste.Col;
  row:=liste.Row;
  y:=row;
  if col=5 then
     begin
     i:=int_einlesen(liste.cells[5,y]);
     if i=0 then
        begin
        test_ausdruck('rowcount =',liste.rowcount);
        liste.deleterow(y);
        test_ausdruck('rowcount =',liste.rowcount);
        end;
     liste.SortColRow(true, 5);
     end;
end;                                 
 


Interner Testausdruck:
rowcount =4
rowcount =3

Oder darf man innerhalb des OnEditDone die betreffende Zeile nicht löschen ?
malabarista
 
Beiträge: 188
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 22. Mär 2017, 11:59 Re: TStringgrid : DeleteRow

Vielleicht fehlt nur ein liste.Invalidate, um das komplette Grid neu auszugeben. Ansonsten wäre ein Demoprojekt gut, um das konkret nachvollziehen zu können.
wp_xyz
 
Beiträge: 1981
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 18. Apr 2017, 11:01 Re: TStringgrid : DeleteRow

So, jetzt habe ich ein Demoprojekt gemacht, bei dem dieser Effekt auftritt.

Wichtig scheint dabei die Anzahl der Spalten zu sein: mit 4 Spalten verhält sich das Grid korrekt, mit 6 Spalten nicht mehr.

Demoprojekt starten und dann die Zelle mit der 4 anklicken, eine 0 eingeben und dann ENTER.
Anschliessend wird nur noch eine Zeile angezeigt.
Warum ?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
malabarista
 
Beiträge: 188
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 18. Apr 2017, 11:36 Re: TStringgrid : DeleteRow

Mit Lazarus Trunk verhält sich das Demo-Projekt normal: Wenn ich in der Zelle mit der "4" eine "0" eingegeben habe, verschwindet diese Zeile, und es bleiben drei Zeilen übrig. Lazarus 1.6.4 und 1.6.2 verhalten sich anders, aber auch anders als von dir beschrieben: Nach der Eingabe der "0" wird die Zeile gelöscht, aber die 1.Zeile ist nun doppelt, so dass die Anzahl der Zeilen konstant bleibt. In die erste Zeile kann man nicht mehr klicken. Seltsam...

Welche Lazarus-Version hast du? Probier mal Trunk (oder warte ein paar Wochen, dann kommt der RC1 von Version 1.9, der den Fix enthalten sollte). Welches Betriebssystem (ich: Windows)?
wp_xyz
 
Beiträge: 1981
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 18. Apr 2017, 11:58 Re: TStringgrid : DeleteRow

Ich habe:
Linux Mint 18.1, 64bit L1.6.2-1 FPC 3.0.0
malabarista
 
Beiträge: 188
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 18. Apr 2017, 14:17 Re: TStringgrid : DeleteRow

Leider habe ich auf der Linux-Mint-VM keinen aktuellen Trunk. Meine Version zeigt das Verhalten von 1.6.2/1.6.4 von Windows: Die Zeile wird gelöscht, aber es erscheint eine zusätzliche, nicht selektierbare Zeile ganz oben, so dass die Anzahl der Zeilen offenbar konstant bleibt.
wp_xyz
 
Beiträge: 1981
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 18. Apr 2017, 15:49 Re: TStringgrid : DeleteRow

Nach meiner Auffassung ist es ein Anzeigeproblem.

Denn ich habe mal alle Zellen nach dem deleterow in eine Datei ausgedruckt: die sind alle korrekt da.
Aber die Anzeige ist ziemlich daneben.
malabarista
 
Beiträge: 188
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon malabarista » 17. Jul 2017, 10:40 Re: TStringgrid : DeleteRow

Ist dieses Problem inzwischen gefixt ?
malabarista
 
Beiträge: 188
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 17. Jul 2017, 11:05 Re: TStringgrid : DeleteRow

malabarista hat geschrieben:Ist dieses Problem inzwischen gefixt ?


Bei mir funktioniert es.

Lazarus 1.9.0 r55514M FPC 3.0.2 x86_64-linux-gtk2
OpenSuse Leap 42.2
gtk2-devel 2.24.31-12.1
theo
 
Beiträge: 7841
Registriert: 11. Sep 2006, 18:01

Beitragvon wp_xyz » 17. Jul 2017, 11:15 Re: TStringgrid : DeleteRow

Mit dem aktuellen Trunk scheint das Problem auf Linux Mint behoben zu sein. Ob der fix in der kommenden Version 1.8 enthalten ist, kann ich nicht sagen - kannst du mit dem RC3 aber einfach selbst ausprobieren.
wp_xyz
 
Beiträge: 1981
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried