我有时会使用从数据库表中加载的列表视图——仅用于少量数据。我不明白你的意思是我不想在每个 tlistview 上编写事件 onclick 以根据我在 tlistview 上选择的项目定位记录/数据集,所以我将向你展示我是如何解决这个问题的问题。
基本上,我创建了一个包含每条记录的主键的子项。所有的用户界面代码都使用了两个列表视图,最后更新了数据库。在加载和存储之间没有与数据库的交互(这可能是我避免你的“点击”问题的地方)。每个字段的宽度在 Object Inspector 中设置;最终子项的宽度为 0(即不显示)。
加载列表视图:
srclist.items.clear;
with qSrcList do
begin
close;
params[0].asdate:= dt; // use date of deposit
open;
while not eof do
begin
ListItem:= srclist.Items.Add;
ListItem.Caption:= fieldbyname ('kabnum').asstring;
ListItem.SubItems.Add (fieldbyname ('price').asstring);
ListItem.SubItems.Add (fieldbyname ('duedate').asstring);
ListItem.SubItems.Add (fieldbyname ('docket').asstring);
ListItem.SubItems.Add (fieldbyname ('id').asstring);
next
end;
close
end;
保存数据:
with dstlist do
for index:= 1 to items.count do
with qInsert do
begin
dstlist.itemindex:= index - 1;
lvitem:= dstlist.selected;
parambyname ('p1').asinteger:= deposit;
parambyname ('p2').asinteger:= strtoint (lvitem.SubItems[3]);
parambyname ('p3').asfloat:= strtofloat (lvitem.SubItems[0]);
execsql;
end;
我希望这对你有帮助。这段代码的上下文(不是很重要)是在一个金融应用程序中,用户希望用支票填充银行存款表格。SrcList 保存尚未存入的支票(每个给定日期只有几张),DstList 保存已连接到给定存款表格的支票。