Treeview 控件 用法 (3)?(20分)

  • 主题发起人 主题发起人 apple058
  • 开始时间 开始时间
A

apple058

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:

我现在有 这样 2 张数据表
表一
部门号 部门名称 负责人
002 办公室 张三
005 财务部 李四
008 客房部 王武
110 餐饮部 赵六 // 部门号可能没有规律,但唯一
表二
部门号 姓名
002 张三
002 刘德华
002 张蔓玉
005 李四
005 张学友
005 毛阿明
008 王武
008 毛毛虫
我在窗体添加一个Treeview
我要在窗体时 使 Treeview 能够得出这样的效果 怎样添加

办公室
002
张三
张三
刘德华
张蔓玉
财务部
005
李四
李四
张学友
毛阿明
客房部
008
王武
王武
毛毛虫
.......
......
.....
......

 
没人知道 怎么操作,不可能吧!我的天啦!
 
//先添加部门
Procedure TFm_Person.Make_Tree;
var
MyTreeNode,MyTreeNode1,MyTreeNodeSub,MyTreeNodeSub1: TTreeNode;
begin
TreeView1.Items.BeginUpdate;
TreeView1.Items.Clear;
MyTreeNode := TreeView1.Items.Add(nil, '城北供电公司');
MyTreeNode.ImageIndex:=0;
ADODataSet1.Close;
ADODataSet1.CommandText:='Select 部门,Count(id) as Num From PersonData Group By 部门';
ADODataSet1.Open;
if ADODataSet1.RecordCount>0 then
begin
Repeat
MyTreeNodeSub:=TreeView1.Items.AddChild(MyTreeNode,ADODataSet1.FieldByName('部门').AsString);
MyTreeNodeSub.ImageIndex:=1;
MyTreeNodeSub.SelectedIndex:=1;
MyTreeNodeSub.HasChildren:=True;
//你可以再加一句来填入部门号码和负责人姓名,我这里只有一个部门名称
ADODataSet1.Next;
Until ADODataSet1.Eof;
end;
ADODataSet1.Close;
TreeView1.Items.EndUpdate;
end;
//在节点的展开事件里写
//我这里是点击部门添加班组,点击班组添加人名
//你可以把加班组的去掉,直接添人名
procedure TFm_Person.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
MyTreeNodeSub,MyTreeNodeSub1: TTreeNode;
BM_Name:String;
begin
if Node.Level=1 then
begin
if Node.Count<>0 then Exit;//如果已经有子节点则不再添加,退出
BM_Name:=Copy(Node.Text);
ADODataSet1.Close;
ADODataSet1.CommandText:='Select 班组 From PersonData Where 部门='''+BM_Name+''' Group By 班组';
ADODataSet1.Open;
if ADODataSet1.RecordCount>0 then
begin
Repeat
MyTreeNodeSub:=TreeView1.Items.AddChild(Node,ADODataSet1.FieldByName('班组').AsString);
MyTreeNodeSub.ImageIndex:=2;
MyTreeNodeSub.SelectedIndex:=2;
MyTreeNodeSub.HasChildren:=True;
ADODataSet1.Next;
Until ADODataSet1.Eof;
end;
ADODataSet1.Close;
end;

if Node.Level=2 then
begin
if Node.Count<>0 then Exit;
BM_Name:=Copy(Node.Parent.Text,1,Pos('[',Node.Parent.Text)-1);
ADODataSet1.Close;
ADODataSet1.CommandText:='Select id,姓名 From PersonData Where 班组='''+Node.Text+''' and 部门='''+BM_Name+'''';
ADODataSet1.Open;
if ADODataSet1.RecordCount>0 then
begin
Repeat
MyTreeNodeSub:=TreeView1.Items.AddChild(Node,ADODataSet1.FieldByName('姓名').AsString);
MyTreeNodeSub.ImageIndex:=3;
MyTreeNodeSub.SelectedIndex:=3;
MyTreeNodeSub1:=TreeView2.Items.AddChild(TreeView2.Items.Item[Node.AbsoluteIndex],ADODataSet1.FieldByName('id').AsString);
ADODataSet1.Next;
Until ADODataSet1.Eof;
end;
ADODataSet1.Close;
end;

end;
 
同意 少爷的拐杖
to 少爷的拐杖:
老兄 你是不是搞配电网的 不可思议 有空跟我联系 QQ:42000924 Pass: DFW
 
自动生成分层树
数据库结构
id parent name .....flag
1 0 str 1
2 1 str 2
flag 是标记字段,你可以标记不同的内容,


pinfo=^nodepro;
nodepro=record
id:integer;
str:string;
flag:integer;
end;

select * from flb
where (parent=:@parentid) and (flag=:@flag)
order by flb_id
Faddtreenode(Mtree:Ttreeview;Mnode:Ttreenode;fieldid,fieldstr,fieldflag:string;parentid,flagid:integer);
var
childnum:integer;
nd,nd1:Tfctreenode;
begin
with mydata.Aqy_flb do
try
if active then close;
parameters[0].Value:=parentid;
parameters[1].Value:=flagid;
prepared:=true;
open;
if not isempty then
begin
disablecontrols;
first;
nd:=nil;
while not eof do
begin
new(info);
info.id:=fieldbyname(fieldid).Asinteger;
info.str:=fieldbyname(fieldstr).asstring;
info.flag :=fieldbyname(fieldflag).AsInteger ;
nd:=Mtree.Items.AddChildobject(Mnode,info.str,info);
next;
end;
nd1:=nd.parent; //返回到所加节点的父节点
nd:=nd1.GetFirstChild; //父节点的第一个叶节点
for childnum:=0 to nd1.Count-1 do
begin
Faddtreenode(Mtree,nd,fieldid,fieldstr,fieldflag,Pinfo(nd.data)^.id,flagid);
nd:=nd.GetNextSibling; // 叶节点的同级节点
end;
enablecontrols;
end else exit ;
prepared:=false;
except
messagebox(handle,'操作数据时出现错误!','错误',mb_ok);
end;
end;
 
TO 少爷的拐杖
请问你懂 用电营业 系统吗?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1107711
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1089872
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
756
import
I
后退
顶部