ListView附件项目显示问题

时间:2017-12-11 08:17:59

标签: listview delphi firemonkey

我使用一个简单的过程来更新listview项目(DynamicAppearance),但是有问题。 我需要在运行时显示(检查)/不显示列表视图项(TAccessoryObjectAppearance,AccessoryType:Checkmark),具体取决于提供的值。 它应该是:

enter image description here

但我明白了:

enter image description here

在设计时我将项目设置为"不可见"。

以下代码不起作用:

procedure UpdateList(lv: TListView);
var
  Litem: TListViewItem;
  iName: TListItemText;
  iCheck: TListItemAccessory;
begin
  FDQuery.Open('SELECT Name, Value FROM tbl_values');

  lv.Items.Clear;
  lv.BeginUpdate;

  while not FDQuery.Eof do
  begin
    Litem := lv.Items.Add;

    iName      := Litem.Objects.FindObjectT<TListItemText>('Name');
    iName.Text := FDQuery.FieldValues['Name'];

    iCheck     := LItem.Objects.FindObjectT<TListItemAccessory>('Check');
    if FDQuery.FieldValues['Value'] > 0 then
      iCheck.Visible:= True
    else
      iCheck.Visible := False;

    FDQuery.Next;
  end;

  lv.EndUpdate;
end;

此过程在form.show事件上运行。

但后来我运行了另一个更改数据库表中某些值的过程,并再次运行相同的过程(UpdateList)来更新listview项值。现在Checkmarks正确显示:

enter image description here

我做错了什么?

Delphi 10.2.1

1 个答案:

答案 0 :(得分:0)

这就是我所做的:

while not FDQuery.Eof do
  begin
    Litem := lv.Items.Add;
    
    **ListView1.ApplyStyleLookup;** //Add this line

    iName      := Litem.Objects.FindObjectT<TListItemText>('Name');
    iName.Text := FDQuery.FieldValues['Name'];

    iCheck     := LItem.Objects.FindObjectT<TListItemAccessory>('Check');
    if FDQuery.FieldValues['Value'] > 0 then
      iCheck.Visible:= True
    else
      iCheck.Visible := False;

    FDQuery.Next;
  end;