Delphi-PRAXiS

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/)
-   -   FireMonkey, Livebinding und Nachkommastellen in einem TGrid (https://www.delphipraxis.net/197468-firemonkey-livebinding-und-nachkommastellen-einem-tgrid.html)

elmar.faber 8. Aug 2018 12:49

FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
Hallo,

wie im Titel schon beschrieben versuche ich unter FireMonkey (Delphi Rad Studio 10.2.3)
und einer kleinen SQLite Datenbank Zahlen auf eine Nachkommastelle zu beschränken.
Leider schlagen alle Versuche bisher fehl. Weder DisplayFormat noch CustomFormat brachten
irgend eine Lösung. Die Ausgabe bleibt immer gleich also 18 wird mit 18.00 ausgegeben...
Der letzte Versuch die Ausgabe per OnDrawColumCell durchzuführen scheiterte, da irgendwie
die Methode DefaultDrawColumnCell nicht mehr existiert obwohl in der Dokumentation darauf
verwiesen wird...
Hat schon einmal jemand hier dieses Problem lösen können?

Viele Grüße

Elmar

Harry Stahl 8. Aug 2018 22:35

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
Von Datenbanken habe ich leider keine Ahnung, daher kann ich Dir in diesem Punkt nicht helfen.

Aber das DefaultDraw kannst Du mit

Delphi-Quellcode:
Column.DefaultDrawCell
aufrufen.

Du musst dann wahrscheinlich bei dem TGrid noch "DefaultDrawing" auf False setzen.

elmar.faber 9. Aug 2018 09:36

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank für den Hinweis, ich dachte ich könnte damit das Problem lösen, aber
irgendwie denke ich wohl falsch herum... Mal ein einfaches Beispiel:

Delphi-Quellcode:
procedure TFrmZutaten.Grid1DrawColumnCell(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
  const Row: Integer; const Value: TValue; const State: TGridDrawStates);
Var
  V : TValue;
  S : String;
begin
  If Column.Header = 'Amount' Then Begin
    S := '18';
    V := TValue.From<String>(S);
  End Else
    V := Value;

  Column.DefaultDrawCell(Canvas, Bounds, Row, V, State);
end;
Und so sieht es aus (rechtes Grid), wieder die Ausgabe 18.00 :evil:

Harry Stahl 9. Aug 2018 17:43

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
Die Verwendung ist hier grundsätzlich so gedacht, dass Du in diesem Event nur für spezifische Fälle, wo eine Abweichung vom Standard erforderlich ist, selber die grafische Ausgabe zeichnest ("canvas.filltext").

So kann man z.B., bei Bedarf auch die Bündigkeit (linkbsbündig, rechtsbündig, etc) ändern (bei Bedarf und soweit verfügbar: In meinem letzten FMX-Buch findest Du unter Tipp R20 und R21 vollständige Beispiele für das zeichnen mit links- rechtsbündiger oder zentrierter Ausgabe, im TGrid bzw. TStringGrid).

Und Fälle, wo keine Abweichung erforderlich ist, da rufst Du die Standard-Zeichenausgabe mit "Column.DefaultDrawCell auf". Oft wird man dann aber eh gleich alles selber zeichnen.

In Deinem Beispiel rufst Du ja immer nur die Standardausgabe auf, und wahrscheinlich ist das ja eine Currency-Column und da ist die Ausgabe eben 18,00.

Davon abgesehen kannst Du bei Verwendung der CurrenyColumn mit ändern der Eigenschaft von "DecimalDigits" von 2 auf 1 die Ausgabe auf eine Nachkommastelle erreichen.

Olli73 9. Aug 2018 19:07

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
Ich habe es gerade mal mit einem ClientDataSet ausprobiert. Wenn ich dort beim Feld das Displayformat auf '#.0' oder '0.0' setze, dann wird diese Einstellung (1 Nachkommastelle) auch genommen.

elmar.faber 12. Aug 2018 09:06

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
@Harry Stahl oh du hast natürlich recht :oops::oops::oops: da muss ich noch mal ran

@Olli73 ich verwende ein TFDQuery und TDataSource mit einer SQLite Datenbank und da klappt das nicht :evil:

p80286 12. Aug 2018 13:25

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
und wie sieht die Query aus?

Gruß
K-H

elmar.faber 13. Aug 2018 10:31

AW: FireMonkey, Livebinding und Nachkommastellen in einem TGrid
 
Also die Tabelle sieht so aus:

Delphi-Quellcode:
TablesSQLite[tbl_data_ingredient] :=
  'CREATE TABLE IF NOT EXISTS tbl_data_ingredient ( '+
  ' IngredientID     INTEGER   NOT NULL PRIMARY KEY AUTOINCREMENT,'+
  ' RecipeRefID      INTEGER   NOT NULL, '+
  ' IngredientRefID  INTEGER   NOT NULL, '+     // aus tbl_sel_Ingredient
  ' Amount           DOUBLE        NULL, '+     // Menge   z.B. 10
  ' UnitRefID        INTEGER       NULL, '+     // Einheit z.B. g, L, kg
  ' Comment          TEXT(500)     NULL, '+     // z.B. "nach Bedarf"
  'FOREIGN KEY (RecipeRefID)               '+
  'REFERENCES tbl_data_recipe (RecipeID)   '+
  'FOREIGN KEY (IngredientRefID)           '+
  'REFERENCES tbl_sel_ingredient (IngredientID) )';
und die Query so:

Code:
SELECT * FROM tbl_data_ingredient
WHERE RecipeRefID = :RecipeID
Es besteht eine Master-Detail Beziehung zu einer weiteren Tabelle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.

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