如何在 ListView 中显示图像取决于日期

How to Show images in ListView depends on the date

我正在使用 Delphi Sydney 10.4 FMX,我有一个 ListView 连接到一个带有 liveBinding 的数据库,ImageList 有 3 个图像。

在 ListView 中,我有 3 个字段:Image、Expiry、Domain。

Expiry 和 Domain 是从数据库中填充的,但我要显示的图像取决于日期,例如:

Expiry = 今天或今天之前的日期:我要显示 imageindex 0

过期 = 从明天到今天的 30 天:我想显示 imageindex 1

到期 = 31 天后从今天开始:我想显示 imageindex 2

procedure TForm1.DomainsListViewUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
begin
  var DT : TDateTime;
  DT := Now;
  if DomainsListView.Items[DomainsListView.ItemIndex].Data['expiry'].AsString < datetostr(DT+30) then
    DomainsListView.Items[DomainsListView.ItemIndex].Data['image'] := 1
  else if DomainsListView.Items[DomainsListView.ItemIndex].Data['expiry'].AsString < DateToStr(DT) then
    DomainsListView.Items[DomainsListView.ItemIndex].Data['image'] := 0
  else if DomainsListView.Items[DomainsListView.ItemIndex].Data['expiry'].AsString > DateToStr(DT+31) then
    DomainsListView.Items[DomainsListView.ItemIndex].Data['image'] := 2
end;

我使用了此代码,但无法正常工作

您正在比较 String 值,这不适用于比较日期。您应该比较 TDateTime 值,并更加注意比较的 顺序

尝试更像这样的东西:

uses
  ..., System.SysUtils, System.DateUtils;

procedure TForm1.DomainsListViewUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
begin
  var Item: TListViewItem := DomainsListView.Items[DomainsListView.ItemIndex]; // or: DomainsListView.Selected
  var dtToday: TDateTime := System.DateUtils.Today;
  var dtExpiry: TDateTime := System.SysUtils.StrToDate(Item.Data['expiry'].AsString);
  if dtExpiry <= dtToday then
    Item.Data['image'] := 0 
  else if dtExpiry < (dtToday+31) then
    Item.Data['image'] := 1
  else
    Item.Data['image'] := 2;
end;