【问题标题】:Change the Number Format in TListView TObjectAppearance更改 TListView TObjectAppearance 中的数字格式
【发布时间】:2021-02-15 22:45:38
【问题描述】:

我已将 TListView 与 TFDQuery 实时绑定。其中一个数据映射到Item Detail,这基本上是一个数字。我希望将数字格式化为##,##0.00。查看Object Inspector 没有可以更改数据格式的属性。

有没有办法可以更改 TListView 中数字的 ItemAppearance?

在显示Object InspectorToogle DesignDebug 视图的屏幕截图下方:

FMX 程序:

unit Unit9;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,
  FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,
  FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,
  FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Wait, FireDAC.Stan.Param, FireDAC.DatS,
  FireDAC.DApt.Intf, FireDAC.DApt, Data.Bind.EngExt, Fmx.Bind.DBEngExt,
  System.Rtti, System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.Components,
  Data.Bind.DBScope, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
  FMX.ListView, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Edit;

type
  TForm9 = class(TForm)
    lbl1: TLabel;
    lsv1: TListView;
    con1: TFDConnection;
    qryLists: TFDQuery;
    bdr1: TBindSourceDB;
    bdl1: TBindingsList;
    tcf1: TLinkFillControlToField;
    lpfText: TLinkPropertyToField;
    qryInsert: TFDQuery;
    btn1: TButton;
    lnkcntrltfld1: TLinkControlToField;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form9: TForm9;

implementation

{$R *.fmx}

procedure TForm9.btn1Click(Sender: TObject);
begin
  qryInsert.ParamByName('id').AsInteger := 1;
  qryInsert.ParamByName('cur_datetime').AsDateTime := now;
  qryInsert.ParamByName('name').AsString := 'sample';
  qryInsert.ParamByName('size_cont').AsString := 'size_cont';
  qryInsert.ParamByName('qty').AsFloat := 10;
  qryInsert.ParamByName('est_price').AsFloat := 1234.5;
  qryInsert.ParamByName('qty_price').AsString := '10 x 1234.5';
  qryInsert.ParamByName('estimate').AsFloat := 10 * 1234.5;
  qryInsert.ExecSQL;
  qryLists.Close;
  qryLists.Open();
end;

end.

FMX 文件:

object Form9: TForm9
  Left = 0
  Top = 0
  Caption = 'Form9'
  ClientHeight = 480
  ClientWidth = 308
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object lbl1: TLabel
    Align = Top
    StyledSettings = [Family, Style, FontColor]
    Size.Width = 308.000000000000000000
    Size.Height = 33.000000000000000000
    Size.PlatformDefault = False
    TextSettings.Font.Size = 14.000000000000000000
    TextSettings.HorzAlign = Center
    Text = '1869'
    TabOrder = 0
  end
  object lsv1: TListView
    ItemAppearanceClassName = 'TImageListItemBottomDetailAppearance'
    ItemEditAppearanceClassName = 'TImageListItemBottomDetailShowCheckAppearance'
    HeaderAppearanceClassName = 'TListHeaderObjects'
    FooterAppearanceClassName = 'TListHeaderObjects'
    Align = Client
    Size.Width = 308.000000000000000000
    Size.Height = 407.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 1
    ItemAppearanceObjects.ItemObjects.Text.Width = 201.000000000000000000
    ItemAppearanceObjects.ItemObjects.Text.Height = 20.000000000000000000
    ItemAppearanceObjects.ItemObjects.Text.PlaceOffset.Y = 1.000000000000000000
    ItemAppearanceObjects.ItemObjects.Detail.Width = 201.000000000000000000
    ItemAppearanceObjects.ItemObjects.Detail.Height = 20.000000000000000000
    ItemAppearanceObjects.ItemObjects.Detail.PlaceOffset.Y = 24.000000000000000000
  end
  object btn1: TButton
    Align = Bottom
    Position.Y = 440.000000000000000000
    Size.Width = 308.000000000000000000
    Size.Height = 40.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 7
    Text = 'btn1'
    OnClick = btn1Click
  end
  object con1: TFDConnection
    Params.Strings = (
      
        'Database=D:\My Project Files\5. my_projects_aws-rest\project_x_v' +
        '0\application\client\database\smartcart.s3db'
      'LockingMode=Normal'
      'DriverID=SQLite')
    Connected = True
    LoginPrompt = False
    Left = 72
    Top = 24
  end
  object qryLists: TFDQuery
    Active = True
    Connection = con1
    SQL.Strings = (
      'SELECT id, date_created, name, size_cont, qty_price, estimate'
      'FROM lists ORDER BY date_created DESC')
    Left = 112
    Top = 24
  end
  object bdr1: TBindSourceDB
    DataSet = qryLists
    ScopeMappings = <>
    Left = 152
    Top = 24
  end
  object bdl1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 20
    Top = 5
    object tcf1: TLinkFillControlToField
      Category = 'Quick Bindings'
      Control = lsv1
      Track = True
      FillDataSource = bdr1
      AutoFill = True
      FillExpressions = <
        item
          SourceMemberName = 'estimate'
          ControlMemberName = 'Detail'
        end>
      FillHeaderExpressions = <>
      FillBreakGroups = <>
    end
    object lpfText: TLinkPropertyToField
      Category = 'Quick Bindings'
      DataSource = bdr1
      FieldName = 'estimate'
      Component = lbl1
      ComponentProperty = 'Text'
    end
    object lnkcntrltfld1: TLinkControlToField
      Category = 'Quick Bindings'
      DataSource = bdr1
      FieldName = 'estimate'
      Track = False
    end
  end
  object qryInsert: TFDQuery
    Connection = con1
    SQL.Strings = (
      'INSERT INTO lists (id, date_created, name, size_cont, '
      '                   qty, est_price, qty_price, estimate) '
      'VALUES (:id, :cur_datetime, :name, :size_cont, '
      '        :qty, :est_price, :qty_price, :estimate);')
    Left = 192
    Top = 24
    ParamData = <
      item
        Name = 'ID'
        DataType = ftInteger
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'CUR_DATETIME'
        DataType = ftDateTime
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'NAME'
        DataType = ftString
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'SIZE_CONT'
        DataType = ftString
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'QTY'
        DataType = ftFloat
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'EST_PRICE'
        DataType = ftFloat
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'QTY_PRICE'
        DataType = ftString
        ParamType = ptInput
        Value = Null
      end
      item
        Name = 'ESTIMATE'
        DataType = ftFloat
        ParamType = ptInput
        Value = Null
      end>
  end
end

【问题讨论】:

  • 在 livebindings 中,应该有一个 CustomFormat 属性。见ListView and LiveBindings
  • @LURD 感谢您分享这个想法。我很惊讶 LiveBindings 中有这样的 CustomFormat 属性。现在,我很难获得正确的语法。这种格式代码Format(‘%n’, Owner.estimate.AsFloat + 0.0) 对我来说似乎不是。仍在试图弄清楚。我收到一个错误invalid or incompatible with argument
  • 请参阅Using Format in a livebindings CustomFormat 了解如何在CustomFormat 中输入表达式的一些输入。我从未使用过它(也没有使用过 FMX),只是浏览 Delphi 的帮助并没有给我带来更好的解释。
  • @LURD 完美!第二条评论有效!太感谢了。你能把你的答案放在这里,这样我就可以把它标记为已回答。
  • 我建议你把答案放在这里。它完全可以接受。

标签: delphi firemonkey livebindings tlistview


【解决方案1】:

有两种方法适用于这种情况:

  1. 在 TListView 级别 TLinkControlToField1 -&gt; CustomFormat : "$ "+UpperCase(%s)。这是最适用的方法,因为数字保持其数字格式并且可以包含在计算中。您可能想知道Uppercase 在这里做什么?只是将(%s)数据显示为字符串,没有任何作用。

  2. 使用格式为$ #,##0.00 的TDataset 字段的Display Format。在这种方法中,当您开始在计算中包含此数字时,$ 将产生错误。

您应该查看此链接以获得更详细的说明https://stackoverflow.com/a/18819719/13810710

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多