有现成的DBTreeView组件,好好去找找吧,
解决方案 »
- 如何把这句改成C#
- 数据库中如何计算平均值
- 请各位推荐推荐关于windows核心机制和VCL框架的书
- 再次请教这个问题!!Webbrowser的控制下载的问题!!!
- 如何直接读取http上的inf文件
- 在DELPHI7中 一个工程怎样引用另一个工程的窗体和变量
- 高难度问题,同时测试一下CSDN改版后的人气:如何选中一条不规则曲线比如Bezier曲线?
- Treeview怎么和数据库相连
- 请问:如何将修改的内容保存到数据库中?
- CheckListBox控件能否有的行显示检查框,有的行不显示?
- 推荐:“欢乐之家理财软件”-开发源码项目的地址
- 三层结构SocketConnection连接,如何在AppServer中得到Client的IP?
数据库里不同的表读出数据生成Tree,如下;
名单
---市场部 //1
--经理
--AA
--BB
--员工
--aa
--bb
---计划部 //2
--经理
--CC
--DD
--员工
--cc
--dd
........如上类同
.........
同时定义了全局变量
type
PMyRec=^TMyRec;
TMyRec=record
Eid:string; //id号
EName:string; //名称
EDuty:string;//岗位
end;
var
MyRec:PMyRec;
实现如下:
procedure MakeEmpNode(DNode,DName);根据传入的节点,和部门名称,生成员工节点。
员工Query.Sql.Text:='select * from Employee Where D_Name='''+DName+''';
员工Query.Open;
ZNode:=TV.items.addChild(DNode,'经理'); //增加经理节点
While not 员工Query.Eof do
being
EName:=员工Query.Fieldbyname('E_Name').AsString;
ZW:=员工Query.Fieldbyname('E_ZW').AsString;
if ZW='经理' then
begin
New(MyRed);///////
MyRec^.Eid=员工Query.Fieldbyname('E_id').AsString;
MyRec^.EName:=员工Query.Fieldbyname('E_Name').AsString;
MyRec^.EDuty;=员工Query.Fieldbyname('E_Duty').AsString;
ENode:=TV.items.AddChildObject(ZNode,EName,MyRec);
end;
员工Query.Next;
end;
ZNode:=TV.items.addChild(DNode,'员工');//增加员工节点
员工Query.First ; //记录移到第一条
While not 员工Query.Eof do
bein
EName:=员工Query.Fieldbyname('E_Name').AsString;
ZW:=员工Query.Fieldbyname('E_ZW').AsString;
if ZW='员工' then
begin
New(MyRec);///////////
MyRec^.Eid=员工Query.Fieldbyname('E_id').AsString;
MyRec^.EName:=员工Query.Fieldbyname('E_Name').AsString;
MyRec^.EDuty;=员工Query.Fieldbyname('E_Duty').AsString;
ENode:=TV.items.AddChildObject(ZNode,EName,MyRec);
end;
员工Query.Next;
end;
你是不是加在这两个地方??溢出,创建是溢出,还是点击时?
要一个动作,那你遍历整个treeview即可我的步骤大概如上,不知各位看的明白么?现在是我想通过选择节点,可以得到不同节点的 TV.OnClick
begin
if TV.Selected<>nil then
TempDuty:=PMyRec(TV.Selected.Data)^.EDuty;
end;
程序可以运行得到想要的Tree,可是在选择节点时,不能很好完成,分析觉的错误原因是
1.在增加经理,员工节点时是用AddChile,没有赋予Data值。
2.是过程1的New(MyRec)是否传递到过程2中,过程1与过程2的MyRec的传递问题,MyRec应该如何在过程1与过程2中实现分配,传递。请大侠指点,应该怎样改正??谢谢