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));
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
