DBGrid Reihenfolge der Spalten sichern

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DBGrid Reihenfolge der Spalten sichern

Beitrag von DL3AD »

... hmm im Moment fällt mir keine bessere Lösung ein - wie könnte man es denn besser machen :?:

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

Re: DBGrid Reihenfolge der Spalten sichern

Beitrag von Michl »

DL3AD hat geschrieben:
Michl hat geschrieben:Hast du mal probiert eine Methode mit Application.QueueAsyncall im OnColumnMoved aufzurufen und in dieser Methode zu speichern?

Wie macht man das ?

Na so: http://wiki.lazarus.freepascal.org/Asynchronous_Calls

In deinem Beispiel könnte man sowas machen:

Code: Alles auswählen

type
  TForm1 = class(TForm)
...
  private
...
    procedure SaveDBGrid1ColumnOrder(Data: PtrInt);
  end;
 
...
 
procedure TForm1.SaveDBGrid1ColumnOrder(Data: PtrInt);
begin
  SaveColumnOrder;  // oder wie auch immer deine Methode heißt
end;
 
procedure TForm1.DBGrid1ColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer);
begin
  Application.QueueAsyncCall(@SaveDBGrid1ColumnOrder, 0);
end;

Code: Alles auswählen

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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGrid Reihenfolge der Spalten sichern

Beitrag von wp_xyz »

DL3AD hat geschrieben:... ist in einem DBGrid Configurations Form - da wird alles zum Tabellendesign eingestellt und somit gleichzeitig sichtbar.

Ich verstehe immer noch nicht, was das mit dem OnColumnMove-Event zu tun hat? Kannst du diesen Dialog soweit isolieren, dass du ihn mal hier posten kannst? Ich vermute, du folgst da einem falschen Ansatz.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DBGrid Reihenfolge der Spalten sichern

Beitrag von DL3AD »

... Danke Michl
Nun funktioniert es mit Application.QueueAsyncall.

Hallo wp_xyz,
zur Laufzeit verschiebe ich die Reihenfolge der Spalten - dass ich verschoben habe signalisiere ich dann mit OnColumnMoved - weil ich unmittelbar danach die Reihenfolge in eine INI schreibe.
aus der INI lade ich dann die Reihenfolge in die Itemlist einer CheckListBox die dann die neue Reihenfolge repräsentiert un eventuell Spalten ein und auszublenden.
Mit Application.QueueAsyncall wird nun sichergestellt das die neue Reihenfolge auch päsent ist bevor ich sie abspeichere.

Gruß Frank

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGrid Reihenfolge der Spalten sichern

Beitrag von wp_xyz »

DL3AD hat geschrieben:wenn ich die Reihenfolge der Spalten durch verschieben ändere dann habe ich mit OnColumnMoved ein Event erzeugt und
wollte dann die neue Reihenfolge speichern.
Nun habe ich festgestellt dass das Event kommt befor die neue Reihenfolge der Spalten "fertig" ist - das sieht man schön wenn eine SchowMessage macht.

Ich finde, das ist ein Bug von DBGrid. "OnColumnMoved" (mit "ed" hinten) heißt: Die Spalte WURDE verschoben, die Operation ist beendet, und daher ist es nicht verständlich, warum die alte Reihenfolge angezeigt wird. Die Bezeichnungen von Events, die VOR einer Aktion ausgelöst werden, enden üblicherweise auf "ing", also "OnColumnMoving". Ich habe einen Bugreport geschrieben: https://bugs.freepascal.org/view.php?id=32210.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DBGrid Reihenfolge der Spalten sichern

Beitrag von DL3AD »

... aha - Bug - jedenfalls konnte ich das Probem dank eurer hervorragenden Hilfe lösen :)

Gruß Frank

Antworten