一个人事管理系统,
想用Treeview进行管理
但是因为部门或姓名都有可能重复,
所以在进行员工定位时出错
请问:
用什么方法来确定当前用户所选择的员工?(不能用员工号显示,这样不直观)
另外,
在TreeView中node的data是作什么用?
怎么用?
想用Treeview进行管理
但是因为部门或姓名都有可能重复,
所以在进行员工定位时出错
请问:
用什么方法来确定当前用户所选择的员工?(不能用员工号显示,这样不直观)
另外,
在TreeView中node的data是作什么用?
怎么用?
解决方案 »
- 双击Delphi5工程或者其他文件不能直接打开,请遇到的人指条路?
- 高分请教
- 关于数据库文件路径的问题,紧急求救!
- 关于提交查询语句的问题!大家进来看看!
- 关天怎样取得DBGRID中当前记录的序号?
- 在报表空间QRDBText里面的文字怎样实现自动换行。
- 问个adoquery 的简单问题,急,望各位帮帮忙
- 怎么我这两个问题竟然没有人正确作答?
- Delphi怎样表示当前工程目录,即相当于VB中的App.Path?
- 一个时间问题:将系统时间如:2002-02-04,如何将它分割成三个字段年份、月份、日期?
- 如何能实现某些软件在word中的工具栏中加入它自己的按钮,给个列子!
- 查询出来的数据如何处理后显示,但是不影响数据库的信息
Node := TreeView1.Add(ParentNode,'姓名');
new(EmpNO);
EmpNO^ := '工号';
Node.Data := EmpNO; Node := TreeView1.Selected;
if Node <> nil then
ShowMessage(String(Node.Data^));
最后注意释放窗体的同时释放指针
if EmpNO <> nil then
Dispose(EmpNO);
----------------------------------------------
riff ur life
实际上是一个无类型指针,可以存放各种数据。
例如按照你所说的 部门或姓名都有可能重复,但是你把他们的id 保存到data
中,根据id 来定位就可以了
var
treeNode:TreeNode;
p:^Integer;
begin
treeNode:=Treeview1.items.add(Nil,'根基点');
new(p);
p^:=0;
treeNode.data:=p;//treenode.data保存0。
。。
end;
或者
new(p);
p^:=0;
treeNode:=treeview1.items.addObject(Nil,'根节点',p);
----------------------------------------------
riff ur life
将自己最近做的修改一下,调试成功。
应该没问题了吧,如果还需要源代码再告诉我。////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//////////数据库结构: //////////
//////////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.