How to Format a DBGrid Column to Display Two Decimal Places? [duplicate]
Asked Answered
R

3

8

I would like to format specific cells to force two decimal places. The data is coming from an ElevateDB stored procedure and hooked into a TDataSource.

EDIT: SQL Programming Note:

I wasn't sure if this was just an ElevateDB issue or not. Before knowing about the Fields Editor, I attempted to format the data at the SQL level by using a CAST (NumericField as varchar(10)) statement inside the stored procedure. By doing so, it did not expose the DisplayFormat property inside the fields editor for this particular field.

When I removed the CAST() statement from the stored procedure, the DisplayFormat property showed up in the Fields Editor.

Rifleman answered 22/4, 2012 at 20:26 Comment(1)
Only numeric fields expose a DisplayFormat property - there is no use for it in string fields.Predestinarian
P
9

You can format the DBGrid columns by formatting the underlying fields. If not done, create static fields in your dataset and then set the DisplayFormat property of the field in question to 0.00 and you are done.

Predestinarian answered 22/4, 2012 at 20:35 Comment(5)
How do you create "Static Fields"? How do you set the DisplayFormat?Rifleman
Use the fields editor to create static (also called persistent) fields. Each field has a property DisplayName.Predestinarian
I "Right-Clicked" and found the "Fields Editor". However... there is no DisplayFormat. I am so frustrated with Delphi right now I could spit.Rifleman
Once inside the fields editor, right-click and select 'Add All Fields', then click on the field you want, and in the object inspector you should see the displayformat property, and set to ###.00Chil
Thanks for your patience... please read edit to OP.Rifleman
J
9

I use same method as Uwe answered, in code after opening the dataset just add this line of code to format certian column:

  TFloatField(MyDs.FieldByName('Cost')).DisplayFormat := '0.00';
Jo answered 22/4, 2012 at 20:55 Comment(0)
S
2

You can format the field using the DrawDataCell event.

procedure TFormMain.DBGridCompareDrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
begin
  if Field.Name = 'FIELDNAME' then
    TFloatField(Field).DisplayFormat := '#,##0.00';
end;
Stockpile answered 23/4, 2012 at 10:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.