Tlistview - 有任何组件,如Tlistview但有数据库访问?

时间:2013-05-16 14:06:56

标签: delphi records dbgrid tlistview

我一直在尝试制作一个有创意的东西来避免dbgrids,我找到Tlistview(使用alphaskinstslistview中的一个) ,似乎是一个很好的方式!

问题是,我不想根据我在onclick上选择的项目,在每个tlistview上对事件record/dataset进行编码,以定位tlistview。我正在使用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放在项目标题上。!

有什么想法吗?

有没有人知道显示大量记录的其他方式,而不仅仅是文本文本和更多文本?我不知道工具调色板上的所有组件,也许有人可以建议我另一个..

1 个答案:

答案 0 :(得分:2)

我有时使用从数据库表加载的列表视图 - 仅用于少量数据。我不明白你的意思我不想在每个tlistview上编写事件onclick来根据我在tlistview 上选择的项目定位记录/数据集,所以我要去告诉你我是如何解决这个问题的。

基本上,我创建了一个子项,它保存了每条记录的主键。所有用户界面代码都使用两个列表视图,最后更新数据库。在加载和存储之间没有与数据库的交互(这可能是我避免'onclick'问题的地方)。每个字段的宽度在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持有已经连接到给定存款形式的支票。