TListview中存在潜在问题-无法识别TDateTimeField的DisplayFormat

TListview中存在潜在问题-无法识别TDateTimeField的DisplayFormat,listview,delphi,firemonkey,Listview,Delphi,Firemonkey,我想出了一个简单的例子。显示格式适用于CustomerMount(整数),但不适用于CustomerDate(Tdatetime)。TListview似乎不尊重TDateTime的显示格式 示例表有3个字段 行showmessage(FDMemTable1.FieldByName('CustomerDate').displaytext);-->即使没有GetText事件,这个.DisplayText也可以工作 它正确显示日期格式“dd mmm(ddd)” 但当它转到TListview时,它不使用

我想出了一个简单的例子。显示格式适用于CustomerMount(整数),但不适用于CustomerDate(Tdatetime)。TListview似乎不尊重TDateTime的显示格式

示例表有3个字段

行showmessage(FDMemTable1.FieldByName('CustomerDate').displaytext);-->即使没有GetText事件,这个.DisplayText也可以工作

它正确显示日期格式“dd mmm(ddd)”

但当它转到TListview时,它不使用DisplayText。但是TIntegerField在TListview中使用了正确的DisplayText,因此TListview处理TIntegerField的.DisplayText与TDateTimeField的方式不同

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    FDMemTable1: TFDMemTable;
    BindSourceDB1: TBindSourceDB;
    FDMemTable1CustomerID: TIntegerField;
    FDMemTable1CustomerName: TStringField;
    BindSourceDB2: TBindSourceDB;
    BindingsList1: TBindingsList;
    FDMemTable1CustomerDate: TDateTimeField;
    FDMemTable1CustomerAmount: TIntegerField;
    procedure Button1Click(Sender: TObject);
  private
    FLinkFillControlToField : TLinkFillControlToField;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  with FDMemTable1 do
  begin
    Open;

    Append;
    FieldByName('CustomerID').AsInteger := 1;
    FieldByName('CustomerAmount').AsInteger := 1250000;
    FieldByName('CustomerName').AsString := 'ABC';
    FieldByName('CustomerDate').AsDateTime := NOW();
    Post;

    Append;
    FieldByName('CustomerID').AsInteger := 2;
    FieldByName('CustomerAmount').AsInteger := 2550000;
    FieldByName('CustomerName').AsString := 'XYZ';
    FieldByName('CustomerDate').AsDateTime := NOW()+1;
    Post;

    Append;
    FieldByName('CustomerID').AsInteger := 3;
    FieldByName('CustomerAmount').AsInteger := 3250000;
    FieldByName('CustomerName').AsString := 'XYZ';
    FieldByName('CustomerDate').AsDateTime := NOW()+2;
    Post;

    (FDMemTable1.FieldByName('CustomerAmount') as TIntegerField).DisplayFormat
      := '#,###,###';
    (FDMemTable1.FieldByName('CustomerDate') as TDateTimeField).DisplayFormat
      := 'dd yyyy (ddd)';
  end;

  showmessage( FDMemTable1.FieldByName('CustomerDate').displaytext );
   // this .DisplayText works but not below

  if not Assigned(FLinkFillControlToField) then
  begin
    FLinkFillControlToField := TLinkFillControlToField.Create(BindingsList1);
    FLinkFillControlToField.Control := listview1;

    with FLinkFillControlToField do
    begin
      Category := 'Quick Bindings';
      Track := False;
      Direction := linkDataToControl;
      AutoActivate := False;
      AutoFill := True;
      BindSourceDB1.DataSource.Enabled := True;
      FillDataSource := BindSourceDB1;
    end;
  end;

  with FLinkFillControlToField do
  begin
    FillHeaderFieldName := 'CustomerName';

    with FillExpressions.AddExpression do
    begin
      //SourceMemberName := 'CustomerID';
      SourceMemberName := 'CustomerAmount';
      ControlMemberName := 'Text1';
    end;
    with FillExpressions.AddExpression do
    begin
      SourceMemberName := 'CustomerDate';
      ControlMemberName := 'Text2';
    end;
  end;
  FLinkFillControlToField.Active := True;
end;

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 404
  ClientWidth = 763
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object ListView1: TListView
    ItemAppearanceClassName = 'TDynamicAppearance'
    ItemEditAppearanceClassName = 'TDynamicAppearance'
    HeaderAppearanceClassName = 'TListHeaderObjects'
    FooterAppearanceClassName = 'TListHeaderObjects'
    Position.X = 16.000000000000000000
    Position.Y = 24.000000000000000000
    Size.Width = 561.000000000000000000
    Size.Height = 353.000000000000000000
    Size.PlatformDefault = False
    ItemAppearanceObjects.ItemObjects.ObjectsCollection = <
      item
        AppearanceObjectName = 'Text1'
        AppearanceClassName = 'TTextObjectAppearance'
        Appearance.Width = 223.000000000000000000
        Appearance.Height = 44.000000000000000000
      end
      item
        AppearanceObjectName = 'Text2'
        AppearanceClassName = 'TTextObjectAppearance'
        Appearance.Width = 208.000000000000000000
        Appearance.Height = 44.000000000000000000
        Appearance.PlaceOffset.X = 326.000000000000000000
      end>
    ItemAppearanceObjects.ItemEditObjects.ObjectsCollection = <
      item
        AppearanceObjectName = 'Text1'
        AppearanceClassName = 'TTextObjectAppearance'
      end>
  end
  object Button1: TButton
    Position.X = 592.000000000000000000
    Position.Y = 24.000000000000000000
    Size.Width = 161.000000000000000000
    Size.Height = 57.000000000000000000
    Size.PlatformDefault = False
    Text = 'Button1'
    OnClick = Button1Click
  end
  object FDMemTable1: TFDMemTable
    FetchOptions.AssignedValues = [evMode]
    FetchOptions.Mode = fmAll
    ResourceOptions.AssignedValues = [rvSilentMode]
    ResourceOptions.SilentMode = True
    UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates]
    UpdateOptions.CheckRequired = False
    UpdateOptions.AutoCommitUpdates = True
    Left = 576
    Top = 128
    object FDMemTable1CustomerID: TIntegerField
      FieldName = 'CustomerID'
    end
    object FDMemTable1CustomerName: TStringField
      FieldName = 'CustomerName'
      Size = 30
    end
    object FDMemTable1CustomerDate: TDateTimeField
      FieldName = 'CustomerDate'
    end
    object FDMemTable1CustomerAmount: TIntegerField
      FieldName = 'CustomerAmount'
    end
  end
  object BindSourceDB1: TBindSourceDB
    DataSet = FDMemTable1
    ScopeMappings = <>
    Left = 576
    Top = 192
  end
  object BindSourceDB2: TBindSourceDB
    DataSet = FDMemTable1
    ScopeMappings = <>
    Left = 576
    Top = 248
  end
  object BindingsList1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 20
    Top = 5
  end
end
类型
TForm1=类(TForm)
ListView1:TListView;
按钮1:t按钮;
fdmemtable 1:TFDMemTable;
BindSourceDB1:TBindSourceDB;
fdmemtable1客户ID:TIntegerField;
FDMEMTable1客户名称:TStringField;
BindSourceDB2:TBindSourceDB;
绑定列表1:t绑定列表;
FDMEMTable1客户日期:tDateTime字段;
FDMEMTable1客户金额:TIntegerField;
程序按钮1点击(发送方:ToObject);
私有的
FLinkFillControlToField:TLinkFillControlToField;
平民的
{公开声明}
终止
变量
表1:TForm1;
实施
{$R*.fmx}
程序TForm1.按钮1单击(发送方:TObject);
开始
用FDMemTable1做什么
开始
打开
追加
FieldByName('CustomerID')。AsInteger:=1;
FieldByName('CustomerAmount')。AsInteger:=1250000;
FieldByName('CustomerName')。关联字符串:='ABC';
FieldByName('CustomerDate')。AsDateTime:=NOW();
邮递
追加
FieldByName('CustomerID')。AsInteger:=2;
FieldByName('CustomerAmount')。AsInteger:=2550000;
FieldByName('CustomerName')。关联字符串:='XYZ';
FieldByName('CustomerDate').AsDateTime:=NOW()+1;
邮递
追加
FieldByName('CustomerID')。AsInteger:=3;
FieldByName('CustomerAmount')。AsInteger:=3250000;
FieldByName('CustomerName')。关联字符串:='XYZ';
FieldByName('CustomerDate').AsDateTime:=NOW()+2;
邮递
(FDMemTable1.FieldByName('CustomerAmount')作为TIntegerField)。显示格式
:= '#,###,###';
(FDMemTable1.FieldByName('CustomerDate')作为TDateTimeField)。显示格式
:=“dd yyyy(ddd)”;
终止
showmessage(FDMemTable1.FieldByName('CustomerDate').displaytext);
//这个.DisplayText可以工作,但不在下面
如果未分配(FLinkFillControlToField),则
开始
FLinkFillControlToField:=TLinkFillControlToField.Create(BindingsList1);
FLinkFillControlToField.Control:=listview1;
用FLinkFillControlToField做
开始
类别:=‘快速绑定’;
磁道:=假;
方向:=linkDataToControl;
自动激活:=假;
自动填充:=真;
BindSourceDB1.DataSource.Enabled:=True;
FillDataSource:=BindSourceDB1;
终止
终止
用FLinkFillControlToField做
开始
FillHeaderFieldName:=“客户名称”;
使用FillExpressions.AddExpression do
开始
//SourceMemberName:=“CustomerID”;
SourceMemberName:=“CustomerAmount”;
ControlMemberName:=“Text1”;
终止
使用FillExpressions.AddExpression do
开始
SourceMemberName:=“CustomerDate”;
ControlMemberName:=“Text2”;
终止
终止
FLinkFillControlToField.Active:=真;
终止
对象窗体1:TForm1
左=0
Top=0
标题='Form1'
ClientHeight=404
ClientWidth=763
FormFactor.Width=320
FormFactor.Height=480
FormFactor.Devices=[桌面]
DesignerMasterStyle=0
对象列表视图1:TListView
ItemAppearanceClassName='TDynamicAppearance'
ItemEditAppearanceClassName='TDynamicAppearance'
HeaderAppearanceClassName='tListHeaderObject'
FooterAppearanceClassName='tListHeaderObject'
位置X=16.000000000000000000000000
位置Y=24.000000000000000000000000
Size.Width=561.000000000000000000000000
大小.高度=353.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Size.PlatformDefault=False
ItemAppearanceObjects.ItemObjects.ObjectsCollection=<
项目
AppearanceObjectName='Text1'
AppearanceClassName='TTextObjectAppearance'
外观.宽度=223.000000000000000000000000
外观.高度=44.000000000000000000000000
终止
项目
AppearanceObjectName='Text2'
AppearanceClassName='TTextObjectAppearance'
外观.宽度=208.000000000000000000
外观.高度=44.000000000000000000000000
外观.PlaceOffset.X=326.000000000000000000000000
结束>
ItemAppearanceObjects.ItemEditObjects.ObjectsCollection=<
项目
AppearanceObjectName='Text1'
AppearanceClassName='TTextObjectAppearance'
结束>
终止
对象按钮1:t按钮
位置.X=592.000000000000000000000000000000
位置Y=24.000000000000000000000000
大小.宽度=161.000000000000000000000000
大小.高度=57.000000000000000000000000
Size.PlatformDefault=False
Text='Button1'
OnClick=按钮1单击
终止
对象FDMemTable1:TFDMemTable
FetchOptions.AssignedValues=[evMode]
FetchOptions.Mode=fmAll
ResourceOptions.AssignedValues=[rvSilentMode]
ResourceOptions.SilentMode=True
UpdateOptions.AssignedValues=[uvCheckRequired,uvAutoCommitUpdates]
UpdateOptions.CheckRequired=False
UpdateOptions.AutoCommitUpdates=True
左=576
Top=128
对象FDMemTable1CustomerID:TIntegerField
FieldName='CustomerID'
终止
对象fdmemTable1客户名称:TStringField
FieldName='CustomerName'
尺寸=30
终止
对象FDMemTable1CustomerDate:TDateTimeField
FieldName='CustomerDate'
终止
对象FDMemTable1客户金额:TIntegerField
FieldName='CustomerAmount'
终止
终止
对象BindSourceDB1:TBindSourceDB
DataSet=FDMemTable1
范围映射=
左=576
Top=192
终止
对象BindSourceDB2:TBindSourceDB
数据集=FDMemTabl
with FillExpressions.AddExpression do
    begin
      SourceMemberName := 'CustomerDate';
      ControlMemberName := 'Text2'; 
      CustomFormat := 'FormatDateTime("dd yyyy (ddd)",%s)';          
    end;