DELPHI中如何用数据库动态更新TREEVIEW控件中的内容,而且要求速度快!请指教!(100分)

  • 主题发起人 主题发起人 ba327lewis
  • 开始时间 开始时间
用dbTreeview控件
 
用1stclass控件
 
1stclass的哪部分?有兴趣
 
能否说清楚些?
 
procedure TmainForm.refreshClick(Sender: TObject);
begin
try
treeview1.items.clear;
table.open;
table.first;
while table.eof<>true do
begin
treeview1.items.add(nil,table.fieldbyname('kindname').asstring);
table.next;
end;
except
showmessage('打开数据库失败,请检查是否与与系统数据库相同');
end;
end;
 
procedure 1; //第一层
var
i:integer;
node:ttreenode;
myrecord:pmyrec;
begin
tv1.Items.Clear;
qry_shi.close;
qry_shi.sql.clear;
qry_shi.sql.add('select * from table');
qry_shi.open;
qry_shi.First;
if qry_shi.recordcount<1 then
exit;
for i:=0 to qry_shi.recordcount-1 do
begin
New(MyRecord);
myrecord^.code:=qry_shi.fields[0].asstring;//存储数据库的索引字段,将来可以读取
shicode:=trim(qry_shi.fields[0].asstring);
node:=tv1.Items.AddObject (nil,shicode+'-'+
qry_shi.fields[1].asstring,myrecord);
second(node,shicode);//第二层
node.ImageIndex:=1;
qry_shi.Next;
end;
end;

procedure tform1.second;
var
i:integer;
node1:ttreenode;
tuancode:string;
myrecord:pmyrec;
begin
qry_tuan.close;
qry_tuan.sql.clear;
qry_tuan.sql.add('select * from table2');
qry_tuan.open;
qry_tuan.First;
if qry_tuan.recordcount<1 then
exit;
for i:=0 to qry_tuan.recordcount-1 do
begin
new(myrecord);
tuancode:=qry_tuan.fields[1].asstring;
myrecord^.code:=qry_tuan.fields[1].asstring;
node1:=tv1.Items.AddChildObject (node,trim(copy(tuancode,4,3))+'-'
+qry_tuan.fields[2].asstring,myrecord);
third(node1,shicode,tuancode);
node1.ImageIndex:=1;//设node上的动态image,得与imagelist配合
qry_tuan.Next;
end;
end;
 
问题太模糊了,具体问题得跟据数据库的结构而定。

一般来说应先读入第一层节点
如想在此时在每个节点前有加号(要展开),应加入一个临时节点
再编写treeview的onexpanding事件
在expanding事件中编写程序从数据库中读入这个节点的子结点
对于子节点的处理和根结点一样。

一般用两个过程:addroot,addnext(自己编)
加两个事件:OnExpanding,OnMouseDown就够了
 
d4技术内幕中用的也是roolin的方法,就是生成一级子节点,在展开节点的时候再读入这个节点的内容,
要不然一下子读入全部数据的话,速度慢好多不。书上有的啦,翻书吧。
 
多人接受答案了。
 
后退
顶部