【发布时间】:2017-12-11 08:17:58
【问题描述】:
我正在使用一个简单的过程来更新列表视图项 (DynamicAppearance),但是有一个问题。 我需要根据提供的值在运行时显示(选中)/或不显示列表视图项(TAccessoryObjectAppearance,AccessoryType:复选标记)。 应该是:
但我明白了:
在设计时,我将项目设置为“不可见”。
这是不起作用的代码:
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) 以更新列表视图项的值。现在复选标记已正确显示:
我做错了什么?
德尔福 10.2.1
【问题讨论】:
-
什么意思,当你说它不起作用?我们如何重现这个问题?请提供Minimal, Complete and Verifiable Example。
-
我已经用图片更新了帖子。
-
谢谢,但您可以用一句话解释实际问题。您仍然没有回答问题:我们如何重现该问题?您需要提供我要求的 MCVE。人们花时间和精力去猜测你的设置,试图重现你的问题是没有意义的。您是否在调试器中单步执行代码以验证实际的数据库数据?
-
在调试时,'FDQuery.FieldValues' 在初始启动时保持什么值?
-
如果没有minimal reproducible example(以及对 FDQuery 提取的数据的深入了解),很难从根本上解决您的问题,但您可以使用以下代码片段来设置/删除复选标记:设置复选标记:Liitem.ItemData.Accessory:=TListBoxItemData.TAccessory.aCheckmark;使用以下代码取消选中项目:LItem.ItemData.Accessory:=TListBoxItemData.TAccessory.aNone;希望这会有所帮助...
标签: listview delphi firemonkey