TFields: OnGetText

12/06/2008 - 13:02 von Alfred Gemsa | Report spam
Hallo,

ein Feld einer Tabelle enthàlt Strings, die einen numerischen Wert mit
drei Stellen hinter dem Komma darstellen.

Im DBGrid soll aber nur eine Nachkommastelle angezeigt werden. Ich habe
folgendes gemacht:

procedure GetNumeric(sender:TField; var Text:string; DisplayRect:boolean);
begin
Text := format('%6.1f',[IBQuery.Fields[3].AsFloat]);
end;

und weise dann zu:

DBGrid.Fields[3].OnGetText := GetNumeric;

und alles klappt. Wenn ich aber dann meine Query neu einlese:

Transction.Commit;
Transaction.StartTransaction;
Query.Open;

wird der Wert wieder mit allen Nachkommastellen angezeigt. Abhilfe
schafft, nach Query.Open wieder OnGetText zuzuweisen.

Ist das so, dass das Grid durch Close und Open der Query die
OnGetText-Zuweisung vergisst?
Oder was mach ich falsch?
Oder wie macht man das alles viel besser?

Gruß, Alfred.
 

Lesen sie die antworten

#1 Marian Aldenhövel
12/06/2008 - 14:55 | Warnen spam
Hallo,

Ist das so, dass das Grid durch Close und Open der Query die
OnGetText-Zuweisung vergisst?



Du hast nicht dem Grid was zugewiesen sondern einem Field. Und die
TField-Instanzen werden beim Open() neu erzeugt (außer Du hàttest
persistente Felder verwendet was Du nicht willst).

Oder was mach ich falsch?



Nix.

Oder wie macht man das alles viel besser?



Du kannst das in den Columns des Grids einstellen. Oder auch nicht, ich
habe schon sehr lange kein TDBGrid mehr verwendet.

Oder Du schreibst die Konfiguration in OnAfterOpen der Query. Wenn Du
das öfter brauchst kannst Du Dir auch eine TDingensQuery ableiten, die
das dann intern macht.

Ciao, MM
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."

Ähnliche fragen