簡體   English   中英

DBGrid中的千位分隔符

[英]Thousand Separator in DBGrid

我正在使用MySQL和Delphi XE4來構建應用程序。 數據庫中有很多數字,我在查詢中使用FORMAT函數來應用千位分隔符!

SELECT Field1,FORMAT((Field2 * Coef), 0) AS blabla FROM MyTable WHERE .....

一切都很好,但是當我嘗試在FastReprot中添加SUM函數時,發生了邏輯錯誤!

FORMAT函數以字符串形式返回結果,SUM函數將字符串連接起來!

SUM(frxDBDataset1."blabla",MasterData1)

Product1| 123,500,000
Product2| 1,455,999,100
________________________________
SUM = 123,500,000-1,455,999,100

在DBGrid中顯示千位分隔符的最佳方法是什么? 我正在考慮在“ OnGetText”事件中應用千位分隔符。 當recordcount> 5000時,此方法是否會導致在DBGrid中顯示數據的延遲?

你有什么建議嗎?

在查詢中格式化結果的格式確實是一個壞主意。 該查詢應用於檢索信息...表示應在其他地方處理。 在這種情況下,我將按照注釋中的建議使用(實際上,我確實使用了)DisplayFormat。

如果您不總是希望在設計時將字段添加到TDataSet中,則還可以編寫一些代碼來自動格式化:

DataSet.Open;
For I := 0 To DataSet.Fields.Count - 1 Do Begin
    If DataSet.Fields[I] Is TFloatField Then
        (DataSet.Fields[I] As TNumericField).DisplayFormat := '###,###,##0.00'
    Else If DataSet.Fields[I] Is TIntegerField Then
        (DataSet.Fields[I] As TNumericField).DisplayFormat := '###,###,##0';
End;

這應該適合您的實際需求...例如,您可以從BD(取決於BD)讀取元數據來決定精度。

在FastReport中,您也可以使用DisplayFormat,或者還可以在備忘錄中使用format函數: [Format('%.2n', [<DataSet."Field">])] ,其中.2表示使用。

編輯:為了解決出現在與右側的減號的問題BiDiMode = bdRightToLeft (見 ),我相信你會真正需要使用OnGetText事件。 我認為您已經自己找到了解決方法,但是為了完整起見,我還是將其包括在內:

procedure TForm1.FieldGetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
  FmtStr: string;
  F: Double;
begin
  F := Sender.AsFloat;
  FmtStr := TNumericField(Sender).DisplayFormat;
  if Sign(F) = -1 then
    Text := '-' + FormatFloat(FmtStr, Abs(F))
  else
    Text := FormatFloat(FmtStr, F)
end;

稍作更改,效果很好。 [ 文本:= FormatFloat(FmtStr,-F)+'-'; ]

特別感謝GabrielF。

procedure TForm1.FieldGetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
  FmtStr: string;
  F: Double;
begin
  F := Sender.AsFloat;
  FmtStr := TNumericField(Sender).DisplayFormat;
  if F < 0 then
    Text := FormatFloat(FmtStr, -F) + '-';
  else
    Text := FormatFloat(FmtStr, F)
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM