加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:24:41 所属栏目:大数据 来源:网络整理
导读:连接到网格的DataSet具有: TField.DisplayFormat := '$######.00' 我想构建我的网格的特定列中的字符串列表: while NOT DataSet.EOF do StringList.Add(TField.DisplayText); 我曾希望速度: DataSet.DisableControls; 但这也会禁用DisplayFormat的应用程
连接到网格的DataSet具有:

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后代(TAggregateField,TDateTimeField,TNumericField和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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读