一个人事管理系统,
想用Treeview进行管理
但是因为部门或姓名都有可能重复,
所以在进行员工定位时出错
请问:
用什么方法来确定当前用户所选择的员工?(不能用员工号显示,这样不直观)
另外,
在TreeView中node的data是作什么用?
怎么用?

解决方案 »

  1.   

    可以分两级:第一级是部门,第二级是姓名,这样的可能会好一点data没见过这个属性阿?
      

  2.   

    var EmpNO: ^String;
       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);
      

  3.   

    node的data是一个指针。。可以存放你需要的数据。
      

  4.   

    你可以结合节点(姓名)与父节点(部门)进行查询
    ----------------------------------------------
                       riff ur life
      

  5.   

    你可以将员工号保存在Data中,当你选择一个节点时取出它的Data值,再根据Data中保存的员工号在数据库中查找。
      

  6.   

    TreeNode.data 
    实际上是一个无类型指针,可以存放各种数据。
    例如按照你所说的 部门或姓名都有可能重复,但是你把他们的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);
      

  7.   

    奇怪,如果在Node的text属性上无法体现出两个员工的区别(假设一个部门里两个人同名同姓),那么用户如何知道自己选择的是哪一个?用户自己都不清楚,你的程序怎么搞清楚?
    ----------------------------------------------
                       riff ur life
      

  8.   

    帮你全部写了吧。
    将自己最近做的修改一下,调试成功。
    应该没问题了吧,如果还需要源代码再告诉我。////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////
    //////////数据库结构:                            //////////
    //////////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.