TREEVIEW和数据库的问题:(100分)

  • 主题发起人 主题发起人 lyplay2
  • 开始时间 开始时间
L

lyplay2

Unregistered / Unconfirmed
GUEST, unregistred user!
想用TREEVIEW显示如下:
总公司
01 分一公司
0101 办公室
李三
010101 财务室
李四
李五
0102 人事科
王二
王三
0103 供销科
010301 供销一科
010302 供销二科
02 分二公司
03 分三公司
04 分四公司

它树的层次不是太固定,人员可能在分公司下的下一级部门,也可能在下二级部门。。

问题:
1、机构表是设置为一个
01
0101
010101
010102
0102
02
0201
020101
020102
。。。。。
还是一个级别设置一个表。
2、用什么方法和TREEVIEW控件联接代码优化,速度快?(最好能贴段代码供小生学习)
我是菜鸟,请各位大侠不吝赐教

谢谢!!!

 
可以采用指针实现你所说的一切。
大概思路是这样的:
  首先用sql语句把相应的数据集提出来,经过排序等相关操作,
然后存入到一个全局的指针数组。
  然后,以后的操作只段对这个指针数组进行操作就可以了,明白了
吗?速度很快,本人经常用这种方式实现一些难度比较高的科题。
  至于代码嘛!至少先得给点分!OK?
  
 
分的好说
不够还可以加
不过一定要好用:)
对了
表如何设置科学?
 
刚好写过这类的的,我写的是一个员工管理,只有两层。

在LISTTREE中显示部门,部门下面就是员工。开始我还是有这想法与数据关联,但一直没到合
适的方法,最后还是用代码一句句的写。主要思路是将数据库记录读出来,然后放到LISTVIEW
中去。
 
可以设计一张表,表里填好这些树节点的关系,然后用递归算法添加树节点。
 
我的建议如下
1、部门数据库结构DWork
workc(部门代码)、workp(上级部门)、desci(部门名称)
员工数据库结构DPers
workc(所属部门)、persc(员工代码)、desci(员工名称)
2、显示树结构
adoquery1.close
adoquery1.sql.text := 'select * form dwork';
adoquery1.open;
adoquery1.filter := 'workp = ' + QuotedStr('');
建立第一层数节点
然后循环第一层树节点加上其它节点,人员也是如此加上



 
用一个递归就得了,简单的很!
 
自己实现递归,
代码如下
procedure TFrmTools.BuildTreeNode ();
procedure CreateSubTree(FNodeName: string; Node: TTreeNode = nil);
var
mLocalName: string;
TreeNode: TTreeNode;
Ads_Tmp: TADODataSet;
BM:Pmyrec;
begin
ADS_Tmp := TADODataSet.Create(nil);
ADS_Tmp.Connection :=dm.ADOConnection1;
with ADS_Tmp do
begin
Close;
CommandText := 'Select * from department Where Parentbm =' + FNodeName;
Open;
First;
while not Eof do
begin
mLocalName := FieldbyName('bm').Asstring;
new(bm);
bm.BMid :=mLocalName;
TreeNode := TreeView.Items.AddChild(Node, FieldByName('bmmc').AsString);
Treenode.Data :=bm;
Treenode.SelectedIndex :=0;
treenode.ImageIndex :=1;
CreateSubTree(mLocalName, TreeNode); //递归调用
Next;
end;
end;
end;
begin
TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
CreateSubTree('0', nil);
TreeView.Items.EndUpdate;
TreeView.Items[1].Selected := True;
end;
另外用VCL,dev 的DBTREEVIEW不错
 
多人接受答案了。
 
后退
顶部