gpt4 book ai didi

delphi - 使用 TField.DisplayFormat 格式化不在数据集中的字符串

转载 作者:行者123 更新时间:2023-12-03 15:26:03 38 4
gpt4 key购买 nike

连接到网格的数据集具有:

TField.DisplayFormat := '$######.00'

我想构建网格特定列中的字符串列表:

while NOT DataSet.EOF do
StringList.Add(TField.DisplayText);

我希望速度能够做到:

DataSet.DisableControls;

但这也会禁用 DisplayFormat 的应用。

不禁用控件意味着运行速度相当慢(在过时的、已弃用的说法中,“你应该现在放弃它”-Paradox/BDE。)

所以,我的问题:

是否有一个格式化函数(例如 DFFormat)使用与 TField.DisplayFormat 相同的表示法?

然后我可以这样做:

 DataSet.DisableControls;
while NOT DataSet.EOF do
StringList.Add(DFFormat(TField.Value));

或者,由于只有几种数据类型,所以我可以执行下面的代码并找出创建有效的格式字符串的方法:

 DataSet.DisableControls;
while NOT DataSet.EOF do
begin
if TField.FieldType = ftString
StringList.Add(AsString)
else if TField.FieldType = ftFloat then
StringList.Add(Format(TField.Value, ...)
else...

上面的代码不会比显示的长很多,但我希望有一个使用 TField 的 DisplayFormat 的格式化函数。还是我要求太多了?

最佳答案

DisplayFormat 仅适用于四个 TField 后代(TAggregateFieldTDateTimeFieldTNumericField > 和 TSQLTimeStampField)。在我看来,这对于其中三个来说很容易实现:

function TFieldToDisplayFormat(const Fld: TField): string;
begin
Result := Fld.AsString;
if (Fld is TDateTimeField) then
Result := FormatDateTime(TDateTimeField(Fld).DisplayFormat,
TDateTimeField(Fld).AsDateTime)
else if (Fld is TNumericField) then
Result := FormatFloat(TNumericField(Fld).DisplayFormat,
TNumericField(Fld).AsFloat)
else if (Fld is TSQLTimeStampField) then
Result := SQLTimeStampToString(TSQLTimeStampField(Fld).DisplayFormat,
TSQLTimeStampField(Fld).AsSQLTimeStamp);
end;

// Sample use
while not DataSet.Eof do
SL.Add(TFieldToDisplayFormat(WhatEverField));

关于delphi - 使用 TField.DisplayFormat 格式化不在数据集中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514269/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com