我在Windows 7 64位上使用XE5 Update 2(所有更新都是最新的)。
我有一个带有简单TListView对象的应用程序。
object lsvReceipts: TListView
Left = 0
Top = 0
Width = 1382
Height = 760
Align = alClient
Columns = <
item
Caption = 'Column 1'
Width = 100
end
item
Caption = 'Column 2'
Width = 100
end
item
Caption = 'Column 3'
Width = 100
end
item
Caption = 'Column 4'
Width = 100
end>
MultiSelect = True
OwnerData = True
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
OnData = lsvReceiptsData
ExplicitLeft = 136
ExplicitTop = 200
ExplicitWidth = 521
ExplicitHeight = 321
end
以下是一些密码。它只显示来自一个firedac TFDQuery对象的数据。
procedure TForm3.lsvReceiptsData(Sender: TObject; Item: TListItem);
var index: integer;
begin
index := Item.Index;
receiptsQuery.RecNo := index;
Item.Caption := dockReceiptsQueryDR_.AsString;
Item.SubItems.Add(receiptsQueryDOCK_RCPT_ID.AsString);
Item.SubItems.Add(receiptsQueryRCVD_DATE.AsString);
end;
正如您在下图中所看到的,当我选择几行然后取消选择时会出现一些重新绘制问题。如果我将OwnerData设置为false并使用lsvReceipts.Items.Add方法手动将记录添加到列表中,则不会发生。
关于如何摆脱这个的任何想法?基于我在这里看到的其他消息,控件充满了问题。不幸的是,我现在必须使用它。
如果您想知道,我需要一个包含多个列的列表,用户可以在其中选择多个记录。我开始使用带有多选项选项集的DBGrid,但是,在使用它之后,选择多行的功能是有限的(例如,SHIFT + Click,SHIFT + PageUp / PageDown不起作用)。我们计划在未来升级到devexpress网格,但是现在我必须坚持使用vcl vanilla控件。
由于