连接到网格的DataSet具有:
TField.DisplayFormat := '$######.00'我希望在我的网格的特定列中构建字符串列表,其中包括:
while NOT DataSet.EOF do
StringList.Add(TField.DisplayText);我曾希望速度能做到:
DataSet.DisableControls;但这也禁用了DisplayFormat的应用程序。
不禁用控件意味着运行得非常慢(在过时的、被废弃的,“您应该放弃它now"-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的格式化函数。还是我要求得太多了?
发布于 2011-12-15 02:35:09
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));发布于 2011-12-15 02:34:23
使用TField的格式函数取决于字段的类型,在您的情况下(对于TNumericField的后代),您必须使用传递字段值和DisplayFormat属性的FormatFloat作为参数。
FormatFloat(Field.DisplayFormat, Field.Value)https://stackoverflow.com/questions/8514269
复制相似问题