0

我一直在尝试制作一个有创意的东西来避免dbgrids,并且我找到了Tlistview(使用来自alphaskins,的那个tslistview),并且似乎是一个不错的方法!

问题是,我不想根据我在 .. 上选择的项目onclick对每个事件进行编码tlistview以定位 a并且我正在使用.. 并且可能存在具有相同名称的记录record/datasettlistviewtlistview 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 放在项目标题上..!

有任何想法吗?

有谁知道显示大量记录的其他方式,而不仅仅是文本文本和更多文本?我不知道工具面板上的所有组件,也许有人可以向我推荐其他组件。

4

1 回答 1

2

我有时会使用从数据库表中加载的列表视图——仅用于少量数据。我不明白你的意思是我不想在每个 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 保存已连接到给定存款表格的支票。

于 2013-05-17T03:40:35.610 回答