在TreeView.OnDblClick事件中 var DMNode:TTreeNode;//部门节点 begin if (TreeView.Items.Count > 0) and (TreeView.Selected <>nil) then begin DMNode:=TreeView.Selected; Query.Close; Query.Sql.Clear; Query.Sql.Add('select 人员名称 from 部门表,人员表'); Query.Sql.Add(' where 部门表.部门名称='''+DMNode.Text+''''); Query.sql.add(' and 部门表.部门编号=人员表.部门编号'); query.open; if Query.recordcount > 0 then begin Query.Frist; while not query.eof do begin TreeView.items.AddChild(DMNode,query['人员名称']); Query.next; end; end; end; end; 搞定
example 1:type
TTestData = class(tpersistent)
private
public
published
end;procedure onclick(sender : tobject);
var
tmpobj:TTestData;
begin
try
tmpobj := TTestData.create;
......
treeview1.selected.data := pointer(tmpobj);
finally
tmpobj := nil
end;
end;example 2:
type
pTestData = ^TTestData
TTestData = record
a,b:integer;
end;
procedure OnClick(sender : tobject);
var
xxx:pTestData;
begin
try
getmem(xxx,sizeof(TtestData));
treeview1.selected.data := xxx;
except
raise;
end;
end;
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//////////数据库结构: //////////
//////////department: name:部门名称,char //////////
////////// d_no:部门号,int //////////
//////////worker: name:员工姓名,char //////////
////////// w_no:员工号,int //////////
////////// d_no:部门号,int //////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, Db, ADODB;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
ADOQuery1: TADOQuery; //连接department
ADOQuery2: TADOQuery; //连接worker
Edit1: TEdit; //结点信息
procedure Button1Click(Sender: TObject);//生成树
procedure TreeView1Click(Sender: TObject);//显示结点信息
procedure FormClose(Sender: TObject; var Action: TCloseAction);//释放p_data
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
p_data:pstring;
implementation{$R *.DFM}//生成树
procedure TForm1.Button1Click(Sender: TObject);
var
fn,sn:ttreenode; //fn:部门结点 sn:员工结点
begin
treeview1.Items.BeginUpdate;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select * from department');
adoquery1.open;
treeview1.Items.Clear;
new(p_data);
p_data^:='root';
fn:=treeview1.Items.AddObject(nil,'root',p_data);
while not adoquery1.Eof do
begin
with treeview1.Items do
begin
new(p_data);
p_data^:=adoquery1.fieldbyname('d_no').asstring;
sn:=treeview1.Items.AddChildobject(fn,adoquery1.fieldbyname('name').asstring,p_data); adoquery2.close;
adoquery2.sql.Clear;
adoquery2.sql.add('select * from worker where d_no=:d_no');
adoquery2.Parameters.ParamByName('d_no').value:=p_data^;
adoquery2.open;
while not adoquery2.Eof do
begin
new(p_data);
p_data^:=adoquery2.fieldbyname('w_no').asstring;
treeview1.Items.addchildobject(sn,adoquery2.fieldbyname('name').asstring,p_data);
adoquery2.Next;
end;
end;
adoquery1.Next;
end;
adoquery1.Close;
adoquery2.close;
treeview1.Items.EndUpdate;
end;//显示结点信息
procedure TForm1.TreeView1Click(Sender: TObject);
begin
if treeview1.Selected=nil then exit; case treeview1.Selected.Level of
1:begin
edit1.text:='部门号:'+pstring(treeview1.selected.Data)^;
end;
2:begin
edit1.text:='工号:'+pstring(treeview1.selected.Data)^;
end;
end;
end;
//释放p_data
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if p_data<> nil then Dispose(p_data);
end;end.
var
DMNode:TTreeNode;//部门节点
begin
if (TreeView.Items.Count > 0) and (TreeView.Selected <>nil) then begin
DMNode:=TreeView.Selected;
Query.Close;
Query.Sql.Clear;
Query.Sql.Add('select 人员名称 from 部门表,人员表');
Query.Sql.Add(' where 部门表.部门名称='''+DMNode.Text+'''');
Query.sql.add(' and 部门表.部门编号=人员表.部门编号');
query.open;
if Query.recordcount > 0 then begin
Query.Frist;
while not query.eof do begin
TreeView.items.AddChild(DMNode,query['人员名称']);
Query.next;
end;
end;
end;
end;
搞定
你给我的怎么用Delphi6大不开呀?
如果你的部门类可以设计一个方法:FindEmployeeByDepartID(aDepartID:String)用来在已经保存在内存的部门对象列表中查找它的员工信息就更好。
在你的例子中,在你部门树的Onchange事件里,
TDepartment(TV.selected.data).FindEmployeeByDepartID;
然后把查询出来的东西显示出来就可以了。