2012-04-22 26 views
7

Vorrei formattare celle specifiche per forzare due cifre decimali. I dati provengono da una stored procedure ElevateDB e sono collegati a una TDataSource.Come formattare una colonna DBGrid per visualizzare due posizioni decimali?

EDIT: programmazione SQL Nota:

non ero sicuro se questo era solo un problema ElevateDB o meno. Prima di conoscere l'editor di campi , ho tentato di formattare i dati a livello SQL utilizzando un'istruzione CAST (NumericField as varchar (10)) all'interno della stored procedure. In questo modo, non ha esposto la proprietà DisplayFormat all'interno dell'editor di campi per questo particolare campo.

Quando ho rimosso la dichiarazione CAST() dalla stored procedure, il DisplayFormat proprietà presentò nel campi Editor.

+0

Solo i campi numerici espongono una proprietà DisplayFormat: non è possibile utilizzarla nei campi stringa. –

risposta

9

È possibile formattare le colonne DBGrid formattando i campi sottostanti. In caso contrario, creare campi statici nel set di dati e quindi impostare la proprietà DisplayFormat del campo in questione su 0.00 e il gioco è fatto.

+0

Come si creano "campi statici"? Come si imposta DisplayFormat? –

+0

Utilizzare l'[editor di campi] (http://docwiki.embarcadero.com/RADStudio/en/Fields_Editor) per creare campi statici (detti anche persistenti). Ogni campo ha una proprietà DisplayName. –

+0

I "Clic con il tasto destro" e ho trovato "Editor campi". Tuttavia ... non esiste DisplayFormat. Sono così frustrato con Delphi che ora potrei sputare. –

7

Io uso stesso metodo rispondeva Uwe, nel codice dopo l'apertura del set di dati è sufficiente aggiungere questa riga di codice per formattare colonna certian:

TFloatField(MyDs.FieldByName('Cost')).DisplayFormat := '0.00'; 
2

è possibile formattare il campo utilizzando l'evento DrawDataCell.

procedure TFormMain.DBGridCompareDrawDataCell(Sender: TObject; 
    const Rect: TRect; Field: TField; State: TGridDrawState); 
begin 
    if Field.Name = 'FIELDNAME' then 
    TFloatField(Field).DisplayFormat := '#,##0.00'; 
end; 
Problemi correlati