我一直在尝试做一个有创意的东西来避免dbgrids,我已经找到了Tlistview (使用来自alphaskins,tslistview的那个),看起来是一个很好的方式!
问题是,我不想在每个tlistview上编写事件onclick,以便根据我在tlistview上选择的项来定位record/dataset。我正在用tlistview item's caption来做这件事..并且可能有同名的记录
下面是我想要避免的代码之一:
with q_find_process do
begin
close;
sql.Clear;
sql.Add('Select * from t_process where process_name like '+quotedstr(streeview1.Selected.Text)+');
open;
end;不,我不想把记录的ID放在项目标题上。。!
有什么想法吗?
有没有人知道显示大量记录而不只是文本文本和更多文本的其他方法?我不知道工具面板上的所有组件,也许有人可以向我推荐其他组件。
发布于 2013-05-17 11:40:36
我有时会使用从数据库表中加载的列表视图--仅用于少量数据。我不明白您所说的是什么意思我不想在每个tlistview上编写事件onclick来根据我在tlistview上选择的项来定位记录/数据集,所以我将向您展示我是如何解决这个问题的。
基本上,我创建了一个包含每个记录的主键的子项。所有用户界面代码都使用两个列表视图,最后更新数据库。在加载和存储之间没有与数据库的交互(这可能是我避免“onclick”问题的地方)。每个字段的宽度在对象检查器中设置;最后一个子项的宽度为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持有已经连接到给定存款表单的支票。
https://stackoverflow.com/questions/16589670
复制相似问题