如何在 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;
我正在使用 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;