关于treeview的问题(200分)

  • 主题发起人 主题发起人 xxyyzz
  • 开始时间 开始时间
X

xxyyzz

Unregistered / Unconfirmed
GUEST, unregistred user!
我对treeview不是很了解,各位大虾是否有什么例子可以研究,
要求不是把数据库内的东西一下之放到树上,而是在树展开是加进树,
速度当然是要快了,不知道谁能帮一下忙,最好是把数据库结构和展开树的
一些函数、过程写的清楚一点。
 
兄弟:这个话题可就多了,你可以看看treeview的帮助文件,
把所有的属性和方法看一遍。
 
数据库结构
Dmitem
PItem 父节点
CItem 子节点

刚进入窗体时OnCreate写入一级节点的结构
SELECT * FROM Dmitem WHERE PItem = ''
循环数据库,建立节点

然后在TreeView的OnChange事件中写入当前节点的子节点(当前节点没有子节点)
SELECT * FROM Dmitem WHERE PItem = TreeView.Selected.Text
循环数据库,建立节点
 
假设有数据库Employee(职员表),结构示意入下
empCode char(6),
empName varchar(10),
empDepart char(6),
.
.
.

tv:TTreeView;

procedure TEmployeeFrm.CreateTree;
var TmpNode1,TmpNode2:TTreeNode;
begin
tv.Items.Clear;
TmpNode1:=tv.Items.Add(nil,'所有职员');
TmpNode1.ImageIndex:=0;
TmpNode1.SelectedIndex:=1;
with dm.tmpQuery do
begin
Close;
Sql.Clear;
Sql.Add('select empDepart from Employee group by empDepart order by empDepart');
Open;
while not eof do
begin
TmpNode2:=tv.Items.AddChild(TmpNode1,FieldByName('empDepart').asstring);
TmpNode2.ImageIndex:=0;
TmpNode2.SelectedIndex:=1;
Next;
end;
Close;
end;
tv.FullExpand;
end;
该过程建立一个树型结构。
 
同意,郭玉梁的意见
但是最好在开始的时候将数据读出数据库,当然不一定加到treeview中,
当onchang时,对已有数据集做filter
这样可能会满足你的速度要求,不然每次都从新open数据集速度反而会降下来。
如果要例子可以mail to you
good luck
 
我的电子邮件是czyoooo@sina.com
把代码发在这好吗
 
你看这样可以吗?

var
root,r1,r2,r3,rtemp: TTreeNode;
begin
Form7.TreeView1.Items.Clear;
root := Form7.TreeView1.Items.Add(nil,'用户管理');
root.ImageIndex := 1;
root.SelectedIndex := 1;
r1 := Form7.TreeView1.Items.AddChild(root,'t1);
r2 := Form7.TreeView1.Items.AddChild(root,'t2');
r3 := Form7.TreeView1.Items.AddChild(root,'t3);
r1.ImageIndex := 2;
r2.ImageIndex := 2;
r3.ImageIndex := 2;
r1.SelectedIndex := 4;
r2.SelectedIndex := 4;
r3.SelectedIndex := 4;
Form1.Query1.Active := false;
Form1.Query1.Close;
Form1.Query1.SQL.Clear;
Form1.Query1.SQL.Add('Select * from login.dbf as login');
Form1.Query1.ExecSQL;
Form1.Query1.Active := true;
Form1.Query1.First;
while not Form1.Query1.Eof do
begin
if Form1.Query1.Fields[2].AsInteger=1 then
begin
rtemp := Form7.TreeView1.Items.AddChild(r1,Form1.Query1.Fields[0].AsString);
end;
if Form1.Query1.Fields[2].AsInteger=2 then
begin
rtemp := Form7.TreeView1.Items.AddChild(r2,Form1.Query1.Fields[0].AsString);
end;
if Form1.Query1.Fields[2].AsInteger=3 then
begin
rtemp := Form7.TreeView1.Items.AddChild(r3,Form1.Query1.Fields[0].AsString);
end;
rtemp.ImageIndex := 3;
Form1.Query1.Next;
end;

end;
 
to cnaoszh
能把例子代码发一份给我吗?先谢谢你了!
sanmingdelphi@21cn.com
 
cnaoszh:
你的例子中的 tvchange中,tmpnode1,好象没有用到我调试没有通过可否告诉我
到底怎么做的谢谢!!!!!
 
接受答案了.
 
后退
顶部