小弟想用DELPHI里面win32\treeview 树型控件做一个向下面这样结构的树型菜单,但是部门与人员都要从数据库里读取,因为部门及人员太多,无法用手工录入。信息产业部-
      刘龙
      王茜
      赵建涛生产运行部-
      王伟
      顾平
      吴立静计划财务处-
      赵敏
      李宇峰
      肖鹏树型菜单做成以后,单击某个人员会显示他的基本信息。希望各位兄弟帮帮忙,最好有现成的例子或是关于这方面的资料。

解决方案 »

  1.   

    var  TopNode,
      SecNode: TTreeNode;
    begin
      Tree.Items.Clear;
      TopNode := Tree.AddChildObject(nil, '信息产业部',TObject('信息产业部')); 
      SecNode := Tree.AddChildObject(TopNode,'刘龙',TOjbect('刘龙'));
      ...
    end;
      

  2.   

    做个标志位,‘1’表示有子集,‘0’表示无子集。
    procedure TFrm_KMDM.treeIter(IDStr:String='');
    var
      Qry_KMDM:TADOQuery;
      L
        :integer;
    begin
      Qry_KMDM:=TADOQuery.Create(nil);
      try
        With Qry_KMDM do
        begin
          Connection:=Con_KMDM;
          Close;
          SQL.Clear;
          SQL.Add('Select 科目代码,科目名称,是否有子集 From 科目表');  
          Open;
          if RecordCount<=0 then
          begin
            TV_KMDM.Items.Clear;    //无记录清空树
          end
          else
          begin
            TV_KMDM.Items.Clear;
            TV_KMDM.Items.Add(nil,'科目代码'+'----'+'科目名称');
            TV_KMDM.Selected:=TV_KMDM.Items.GetFirstNode;
            L:=length(Fields[0].Value);     //取第一级科目代码的长度
            While not Eof do
            begin
              if (copy(Fields[0].Value,0,L)=copy(IDStr,0,L)) OR (IDStr='') then   //如果为根节点或代码匹配
              begin
                TV_KMDM.Items.AddChild(TV_KMDM.Selected,Fields[0].Value+'    '+Fields[1].Value);  //添加子节点(代码+空格+名称)
                TV_KMDM.Selected:=TV_KMDM.Selected.GetLastChild;        //获取刚添加的节点
                if Fields[2].value=0 then                 //为叶节点
                  TV_KMDM.Selected:=TV_KMDM.Selected.Parent          //返回父节点
                else
                  IDStr:=TV_KMDM.Selected.Text;
              end
              else
              begin
                if Length(Fields[0].Value)=L then
                begin
                  TV_KMDM.Selected:=TV_KMDM.Items.GetFirstNode;
                  TV_KMDM.Items.AddChild(TV_KMDM.Selected,Fields[0].Value+'    '+Fields[1].Value);
                  TV_KMDM.Selected:=TV_KMDM.Selected.GetLastChild;        //获取刚添加的节点
                  if Fields[2].value=0 then                 //为叶节点
                    TV_KMDM.Selected:=TV_KMDM.Selected.Parent          //返回父节点
                  else
                    IDStr:=TV_KMDM.Selected.Text;
                end;
              end;
              Next;
            end;
          end;
        end;
      finally
        Qry_KMDM.Free;
      end;
      
    end;
      

  3.   

    晕~就是你的treeview的名字啊。
      

  4.   

    var
      Node: TTreeNode;
    begin
      with adoQuery1 do
      begin
        close;
        SQL.Text := 'select 部门 from table1';
        Open;
        while not Eof do
        begin
          Node := treeview1.Items.Add(nil, FieldByName('部门').AsString);
          with adoQuery2 do
          begin
            close;
            SQL.Text := 'select 人员 from table2 where 部门=' + QuotedStr(adoQuery1.FieldByName('部门').AsString);
            Open;
            while not eof do
            begin
              treeview1.Items.AddChild(Node, FieldByName('人员').AsString);
              Next;
            end;
            Close;
          end;
          Next;
        end;
        Close;
      end;
    end;
      

  5.   

    procedure TForm1.FormCreate(Sender: TObject);
    var Node:TTreeNode;
        NoDepName:string;
    beginwhile not form1.ADODataSet1.Eof do
    begin
      Node:=form1.TreeView1.Items.Add(nil,ADODataSet1.FieldByName('DepName').AsString);
      NoDepName:=QuotedStr(ADODataSet1.FieldByName('DepName').AsString);
      form1.ADODataSet2.Connection:=ADOConnection1;
      form1.ADODataSet2.CommandText:='select * from v_oa_sys_department_account where DepName = ''+NoDepName+''';
      form1.ADODataSet2.Active:=True;
         while not form1.ADODataSet2.Eof do
         begin
           treeview1.Items.AddChild(Node,ADODataSet2.FieldByName('TrueName').AsString);
           form1.ADODataSet2.Next;
         end;
      form1.ADODataSet1.Next;
    end次段代码只能显示第一层部门的菜单,但是显示不出来人员,不知道为什么,请各位帮忙看看谢谢