![]() |
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:
Ich rufe die Methode also selbst in einem Event des Grids auf.
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; Gibt es einen eleganteren Weg? |
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Du könntest OnDataChange von der Datasource dafür verwenden.
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Das Problem ist, dass OnDataChange auch bei InternalCalc-Feldern aufgerufen wird. Ich habe so also eine Endlosschleife...
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Ah ok, reicht da die Abfrage auf State und Field nicht um das abzufangen?
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Eigentlich werden die CalcFields automatisch bei jeder Änderung eines Datenfeldwertes neu berechnet. Irgendetwas stimmt da bei dir nicht.
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Zitat:
|
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
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Zitat:
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Zitat:
|
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? |
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Keine Ahnung, ob das ein Bug ist oder As Designed, aber das ist schon eine Weile so. Ich weiß, daß TClientDataSet RefreshInternalCalcFields überschreibt und dort CalculateFields aufruft. FireDAC macht das offenbar nicht.
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Dann werde ich mir wohl eine entsprechende Klasse ableiten müssen...
|
AW: OnCalcFields bei Spaltenwechsel im TDBGrid
Ok, habe eine Komponente abgeleitet und RefreshInternalCalcFields entsprechend (so wie beim ClientDataSet) überschrieben... Läuft nu wie gewünscht, so habe ich mir das gedacht :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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