Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   OnCalcFields bei Spaltenwechsel im TDBGrid (https://www.delphipraxis.net/175392-oncalcfields-bei-spaltenwechsel-im-tdbgrid.html)

Morphie 18. Jun 2013 13:32

OnCalcFields bei Spaltenwechsel im TDBGrid
 
Ich habe ein TADQuery (FireDAC) mit diversen calculated Fields an eine TDBGrid-Komponente gehängt und möchte in dem Grid bestimmte Berechnungen durchführen...
Die Query-Komponente führt OnCalcFields allerdings immer erst nach einem Update aus (z.B. wenn ich zum nächsten Datensatz wechsele), was auch logisch ist, da die Query-Komponente von einem Spaltenwechsel gar nichts mitkriegt.

Wie kann ich die berechneten Felder bereits neu berechnen lassen, wenn ich im Grid die Spalte wechsele?
Angenommen ich habe folgende Spalten: X (Persistent), Y (Persistent), Z (Berechnet)
Wenn ich jetzt X oder Y im Grid bearbeite, soll Z sofort neu berechnet werden, sobald ich in eine andere Spalte, bzw. aus dem Editmodus springe.

Im Moment gehe ich folgenden Weg:
Delphi-Quellcode:
procedure TDummyForm.DBGrid1ColEnter(Sender: TObject);
begin
  if (self.Query1.State = dsEdit) then
    self.Query1CalcFields(Query1);
end;

procedure TDummyForm.Query1CalcFields(DataSet: TDataSet);
begin
  // Hier werden die Spalten neu berechnet
end;
Ich rufe die Methode also selbst in einem Event des Grids auf.

Gibt es einen eleganteren Weg?

baumina 18. Jun 2013 13:38

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Du könntest OnDataChange von der Datasource dafür verwenden.

Morphie 18. Jun 2013 13:59

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Das Problem ist, dass OnDataChange auch bei InternalCalc-Feldern aufgerufen wird. Ich habe so also eine Endlosschleife...

baumina 18. Jun 2013 14:01

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Ah ok, reicht da die Abfrage auf State und Field nicht um das abzufangen?

Uwe Raabe 18. Jun 2013 14:04

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Eigentlich werden die CalcFields automatisch bei jeder Änderung eines Datenfeldwertes neu berechnet. Irgendetwas stimmt da bei dir nicht.

baumina 18. Jun 2013 14:10

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1218909)
Eigentlich werden die CalcFields automatisch bei jeder Änderung eines Datenfeldwertes neu berechnet. Irgendetwas stimmt da bei dir nicht.

Nur wenn AutoCalcFields=True ist und davon wird wegen ständigem Ereignisauslösen meist abgeraten.

Morphie 18. Jun 2013 14:11

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Ist bei mir aber True, trotzdem wird nur nach jedem Datensatzwechsel neu berechnet... ich wühle mich mal durch die Quellen

Uwe Raabe 18. Jun 2013 14:13

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Zitat:

Zitat von baumina (Beitrag 1218911)
Zitat:

Zitat von Uwe Raabe (Beitrag 1218909)
Eigentlich werden die CalcFields automatisch bei jeder Änderung eines Datenfeldwertes neu berechnet. Irgendetwas stimmt da bei dir nicht.

Nur wenn AutoCalcFields=True ist und davon wird wegen ständigem Ereignisauslösen meist abgeraten.

Das wäre aber hier wohl der "elegantere Weg" nach dem anfangs gefragt wurde.

baumina 18. Jun 2013 14:15

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1218913)
Das wäre aber hier wohl der "elegantere Weg" nach dem anfangs gefragt wurde.

Stimmt, immer diese Wege nach Rom ...

Morphie 18. Jun 2013 14:29

AW: OnCalcFields bei Spaltenwechsel im TDBGrid
 
Okay... Also sobald man mindestens ein InternalCalcField im DataSet hat, wird OnCalcFields nicht mehr automatisch aufgerufen...
Ist das jetzt ein Bug, oder by Design?! =/

Ich habe XE3 mit FireDAC 3119 (7.0.1)
Kann das mal bitte jemand mit einer neueren Version checken?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz