Gelöst: TMemdataset Feldformat und TDBGrid
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Gelöst: TMemdataset Feldformat und TDBGrid
Hi
Mittels TMemdataset wird eine Tabelle erstellt und in einem TDBGrid zum Editieren angezeigt.
Für eine der Tabellenspalten suche ich ein passendes Format das mir einen Dezimalwert (Wie DEZIMAL 5,2 von MariaDB oder MySQL) anzeigt.
TMemdataset scheint keinen entsprechenden TFieldType für Dezimalwerte zu haben (Unit DB Zeile 106, TFieldType). ftCurrency wäre in etwa das was ich suche (mit mehr Nachkommastellen allerdings) nur wird dann ein Währungszeichen angezeigt.
Mein Workaround war ftFloat als FieldType zu nehmen und der Felddefinition auch eine Editmask (EditMask:='0,000';) mitzugeben damit diese im Grid übernommen wird.
Klappt auch, aber die Editmask verhält sich aus meiner Sicht "komisch" denn einfach zb 1 (eins) als Zahl einzugeben und dann ENTER oder TAB zu drücken um das Feld zu verlassen geht nicht. Man muss scheinbar die volle Editmask ausfüllen (1,00).
Ich sehe da schon Fragen aus Benutzersicht auf mich zukommen -- geht das irgendwie anders?
Eleganter und smoother aus Benutzersicht?
Beispielprojekt liegt bei -- THX
Mittels TMemdataset wird eine Tabelle erstellt und in einem TDBGrid zum Editieren angezeigt.
Für eine der Tabellenspalten suche ich ein passendes Format das mir einen Dezimalwert (Wie DEZIMAL 5,2 von MariaDB oder MySQL) anzeigt.
TMemdataset scheint keinen entsprechenden TFieldType für Dezimalwerte zu haben (Unit DB Zeile 106, TFieldType). ftCurrency wäre in etwa das was ich suche (mit mehr Nachkommastellen allerdings) nur wird dann ein Währungszeichen angezeigt.
Mein Workaround war ftFloat als FieldType zu nehmen und der Felddefinition auch eine Editmask (EditMask:='0,000';) mitzugeben damit diese im Grid übernommen wird.
Klappt auch, aber die Editmask verhält sich aus meiner Sicht "komisch" denn einfach zb 1 (eins) als Zahl einzugeben und dann ENTER oder TAB zu drücken um das Feld zu verlassen geht nicht. Man muss scheinbar die volle Editmask ausfüllen (1,00).
Ich sehe da schon Fragen aus Benutzersicht auf mich zukommen -- geht das irgendwie anders?
Eleganter und smoother aus Benutzersicht?
Beispielprojekt liegt bei -- THX
- Dateianhänge
-
- project1.zip
- Beispielprojekt
- (126.13 KiB) 88-mal heruntergeladen
Zuletzt geändert von charlytango am Fr 22. Jan 2021, 11:19, insgesamt 1-mal geändert.
- gladio
- Beiträge: 217
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: TMemdataset Feldformat und TDBGrid
Hast du mal andere EditMask ausprobiert?
https://wiki.freepascal.org/TMaskEdit
https://wiki.freepascal.org/TMaskEdit
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: TMemdataset Feldformat und TDBGrid
Danke, der Tip hat schon etwas geholfen. Die EditMask '0,999' hat schon sehr geholfen.
Noch andere Vorschläge?
Noch andere Vorschläge?
Re: TMemdataset Feldformat und TDBGrid
DisplayFormat? Du musst allerdings das Feld nach TFloatField casten:
Code: Alles auswählen
with TFloatField(mdsTemplate.FieldByName('Anzahl')) do
begin
DisplayLabel := 'Anzahl';
ReadOnly := False;
Visible := True;
DisplayWidth := 10;
DisplayFormat := '0.000'; // <---------------- HIER
//POS2 hier ist evtl die richtige Editmask nötig
// diese verhält sich für mich komisch
// EditMask:='0,000';
end;
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: TMemdataset Feldformat und TDBGrid
hmm....
scheinbar wird mit
zwar ein Feld erzeugt aber es scheint keines vom Typ TFloatField zu sein.
Ich habe versucht den Erstellungsprozess im Code zurückzuverfolgen, hab mich dann aber irgendwie bei den TFielddefs "verirrt".
Jedenfalls stammt ein TFloatField von TNumeric ab und dort sind beide Eigenschaften definiert.
TNumericField.DisplayFormat
TNumericField.EditFormat
scheinbar je ein Format zur Anzeige und zum Editieren.
Wobei in beiden Beschreibungen folgendes steht:
"Which formatting function (and, consequently, which format can be entered)"
also doch beide auch zur Eingabe?
Für mich funktioniert
ohne den Cast auf TFloatField ausreichend gut, damit.... case closed, Danke
scheinbar wird mit
Code: Alles auswählen
mdsTemplate.FieldDefs.Add('Anzahl', ftFloat, 5);
Ich habe versucht den Erstellungsprozess im Code zurückzuverfolgen, hab mich dann aber irgendwie bei den TFielddefs "verirrt".
Jedenfalls stammt ein TFloatField von TNumeric ab und dort sind beide Eigenschaften definiert.
TNumericField.DisplayFormat
TNumericField.EditFormat
scheinbar je ein Format zur Anzeige und zum Editieren.
Wobei in beiden Beschreibungen folgendes steht:
"Which formatting function (and, consequently, which format can be entered)"
also doch beide auch zur Eingabe?
Für mich funktioniert
Code: Alles auswählen
EditMask:='0,999';
Re: TMemdataset Feldformat und TDBGrid
Nein, hier wird auch noch kein Feld erzeugt, sondern nur ein TFieldDef, als die Anweisung, wie das Feld aussehen soll. Erzeugt wird das Feld später in TFieldDef.CreateField, und dort wird dem bei FieldDefs.Add angegebenen Feldtypen ftFloat die Klasse TFloatField zugeordnet, was dann letztendlich zu einem TFloatfield führt.charlytango hat geschrieben: ↑Fr 22. Jan 2021, 11:19hmm....
scheinbar wird mitzwar ein Feld erzeugt aber es scheint keines vom Typ TFloatField zu sein.Code: Alles auswählen
mdsTemplate.FieldDefs.Add('Anzahl', ftFloat, 5);
Zur Klarstellung: DisplayFormat ändert das Anzeigeformat, lässt aber den Feldinhalt unverändert. EditMask greift schon bei der Eingabe ein und lässt nur bestimmte Zeichen zu, die dann halt auch entsprechend angezeigt werden.
Ich weiß jetzt nicht, was das DECIMAL 5,2 von MariaDB/MySQL macht. Ist das nur für die Ausgabe, oder werden damit die Zahlen auch nur mit 2 Dezimalstellen abgespeichert? Letzteres hieße insbesondere, dass diese DB Zahlen als Strings abspeichert, was ich mir nicht vorstellen kann.
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Gelöst: TMemdataset Feldformat und TDBGrid
danke f die kompetente Erklärung. So etwas ähnliches hatte ich mir schon gedacht.
Freue mich, hier immer wieder etwas dazu lernen zu können - THX
Freue mich, hier immer wieder etwas dazu lernen zu können - THX