我要动态的把各个部门名称和各个部门下的人的名字加到treeview里面呀如果部门增加了或者人员多了,能在treeview反应出来啊

解决方案 »

  1.   

    你可以这样试试:
      当添加完部门后,再用循环遍历部门结点,同时用Query动态生成SQL语句选出既是当前部门,又是部门上级结点的在职情况的员工记录,再生成部门的子结点就OK了。
      

  2.   

    ===============a example============
    假设有数据库Employee(职员表),结构示意入下
    empCode char(6),
    empName varchar(10),
    empDepart char(6),
    .
    .
    .tv:TTreeView;procedure TEmployeeFrm.CreateTree;
    var TmpNode1,TmpNode2:TTreeNode;
    begin
      tv.Items.Clear;
      TmpNode1:=tv.Items.Add(nil,'所有职员');
      TmpNode1.ImageIndex:=0;
      TmpNode1.SelectedIndex:=1;
      with dm.tmpQuery do
        begin
          Close;
          Sql.Clear;
          Sql.Add('select empDepart from Employee group by empDepart order by empDepart');
          Open;
          while not eof do
            begin
              TmpNode2:=tv.Items.AddChild(TmpNode1,FieldByName('empDepart').asstring);
              TmpNode2.ImageIndex:=0;
              TmpNode2.SelectedIndex:=1;
              Next;
            end;
          Close;
        end;
      tv.FullExpand;
    end;
    该过程建立一个树型结构。 
      

  3.   

    部门是不是多层的,如果是多层的,可以遍历先增加到TREEVIEW中,然后增加人员
      

  4.   

    procedure Tfrm_ryxx.FormShow(Sender: TObject);
    var cxbmadoquery:Tadoquery;
        i:integer;
        str1:string;
    begin
       cxbmadoquery:=Tadoquery.create(application);
       with cxbmadoquery do
          begin
            connection:=DM_GZGS.adocgzgsdb;
            SQL.Add('select 部门名称 from bmfl');
            close;
            open;
            str1:=fieldbyname('部门名称').asstring;
            next;
            treeview1.Items.AddChild(treeview1.items[2],str1);
                 
            for i:=0 to recordcount-2 do
              begin
                treeview1.Items.Add(treeview1.items[3+i],fieldbyname('部门名称').asstring);
                next;
              end;      end;end;(treeview不知道用啊),这是我上面加入部门的代码, 还有部门下面的人员怎么加进去?
      

  5.   

    to mudeen  还少了一层啊~ ~to千灯,快来拣钱啊,我马上跳楼了,我的口袋,只有三十三块!
      

  6.   

    别急别急小弟来也!
    看看下面一断代码吧也许对你有帮助,思想是这样的从数据库中找出相应的信息把他写入文本文件,然后从文件中导入到treeview中。
    procedure TSMSServerDM.GetTreeTable(var FWID: OleVariant;out XJTreeTable, DATreeTable: OleVariant);//构造tree
    var
        tblList:TStringList;
        iCount:Integer;
        Fanwei,SQLStr:string;
    begin
        ADOConnection.Connected:=true;
        TreeQuery1.Active:=true;
        TreeQuery2.Active:=true;
        //////////////////////////////成绩tree
        Fanwei:=FWID;
        if Fanwei='00' then SQLStr:='SELECT * FROM xi ORDER BY xi_id'
        else SQLStr:='SELECT * FROM xi where xi_id='''+Fanwei+'''';
        with TreeQuery1 do begin  Close;SQL.Clear;SQL.Add(SQLStr);Prepared;open;  end; //构造TreeQuery1的SQL语句
        tblList:=TstringList.Create;
        try
            while not TreeQuery1.Eof do
            begin
                tblList.Add(TreeQuery1.Fields[0].AsString+TreeQuery1.Fields[1].AsString);
                with TreeQuery2 do
                begin
                    Close;SQL.Clear;
                    SQL.Add('SELECT * FROM guanli_chengji WHERE firstname LIKE ''__'+TreeQuery1.Fields[0].AsString+'__'' ORDER BY firstname');
                    Prepared;open;
                end; //构造TreeQuery2的SQL语句
                while not TreeQuery2.Eof do
                begin
                tblList.Add(''#9''+TreeQuery2.Fields[0].AsString+'---'+TreeQuery2.Fields[1].AsString);
                TreeQuery2.Next;
                end;
                TreeQuery1.Next;
            end;
            XJTreeTable:= VarArrayCreate([0, tblList.Count - 1], varVariant);
            for iCount:=0 to tblList.Count-1  do
       begin
                XJTreeTable[iCount]:=tblList.Strings[iCount];
            end;
         finally
         tblList.Free;
         end;
         /////////////////////////////////////////档案tree
         try
            with TreeQuery1 do begin  Close;SQL.Clear;SQL.Add('SELECT tablename FROM guanli_dangan');Prepared;open;  end; //构造TreeQuery1的SQL语句
            tblList:=TstringList.Create;
            while not TreeQuery1.Eof do
            begin
                tblList.Add(TreeQuery1.Fields[0].AsString);
                TreeQuery1.Next;
            end;
            DATreeTable:= VarArrayCreate([0, tblList.Count-1], varVariant);
            for iCount:=0 to tblList.Count-1  do
            begin
                DATreeTable[iCount]:=tblList.Strings[iCount];
            end;
         finally
         tblList.Free;
         end;
         /////////////////////////////////////////
         TreeQuery1.Active:=false;
         TreeQuery2.Active:=false;
         ADOConnection.Connected:=false;
    end;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    procedure  TMainForm.ConnectButtonClick(Sender: TObject);//导入Tree
    var
        XJTreeTable,DATreeTable,JiuYeTable:Variant;
        XJTreeFile,DATreeFile,JiuyeTreeFile:TextFile;
        icount:integer;
    begin
        MainSocketConnection.AppServer.GetTreeTable(fanwei,XJTreeTable, DATreeTable);
        ///////////////////////////////////
        AssignFile(XJTreeFile,'c:\chengji.ini');
        ReWrite(XJTreeFile);
        if (VarIsArray(XJTreeTable))then
        begin
            for iCount:=VarArrayLowBound(XJTreeTable,1) to VarArrayHighBound(XJTreeTable,1)do
            begin
                Writeln(XJTreeFile,XJTreeTable[iCount]);
            end;
        end;
        CloseFile(XJTreeFile);
        TreeViewchengji.LoadFromFile('c:\chengji.ini');
        /////////////////////////////////
        AssignFile(DATreeFile,'c:\dangan.ini');
        ReWrite(DATreeFile);
        if (VarIsArray(DATreeTable))then
        begin
            for iCount:=VarArrayLowBound(DATreeTable,1) to VarArrayHighBound(DATreeTable,1)do
            begin
                Writeln(DATreeFile,DATreeTable[iCount]);
            end;
        end;
        CloseFile(DATreeFile);
        TreeViewdangan.LoadFromFile('c:\dangan.ini');
        //////////////////////////////////// 
        AssignFile(JiuyeTreeFile,'c:\Jiuye.ini');
        ReWrite(JiuyeTreeFile);
        MainSocketConnection.AppServer.GetJiuyeTable(JiuYeTable);
        if (VarIsArray(JiuYeTable))then
        begin
            for iCount:=VarArrayLowBound(JiuYeTable,1) to VarArrayHighBound(JiuYeTable,1)do
            begin
                Writeln(JiuyeTreeFile,JiuYeTable[iCount]);
            end;
        end;
        CloseFile(JiuyeTreeFile);
        JiuyeTreeView.LoadFromFile('c:\Jiuye.ini');
        ////////////////////////////////////////
        ChjDel.Enabled:=false;
        DBGrid1.Visible:=false;label1.Caption:='';changebutton.Enabled:=false;
        SelectButton.Enabled:=false;
        StudentRepButton.Enabled:=false;
        ChengjiRepButton.Enabled:=false;ChangeStudentButton.Enabled:=false;
        /////////////
        CreateJiuyeTableButton.Enabled:=true;
        ChangeJiuyeButton.Enabled:=false;
        JiuyeDangzhuanRepButton.Enabled:=false;
        JiuyeBaodaoRepButton.Enabled:=false;
        CutTable.Enabled:=false;
        /////////////
        TreeConnected:=true;
    end;
      

  7.   

    是不是太长了,关键在这里:
    一、从数据库中得到信息添加到一个表tblList中(#9是TAB键),TreeQuery2的查询条件是TreeQuery1 的查询结果哦。
    with TreeQuery1 do begin  Close;SQL.Clear;SQL.Add(SQLStr);Prepared;open;  end; //构造TreeQuery1的SQL语句
        tblList:=TstringList.Create;
        try
            while not TreeQuery1.Eof do
            begin
                tblList.Add(TreeQuery1.Fields[0].AsString+TreeQuery1.Fields[1].AsString);
                with TreeQuery2 do
                begin
                    Close;SQL.Clear;
                    SQL.Add('SELECT * FROM guanli_chengji WHERE firstname LIKE ''__'+TreeQuery1.Fields[0].AsString+'__'' ORDER BY firstname');
                    Prepared;open;
                end; //构造TreeQuery2的SQL语句
                while not TreeQuery2.Eof do
                begin
                {(***关键哦***)}tblList.Add(''#9''+TreeQuery2.Fields[0].AsString+'---'+TreeQuery2.Fields[1].AsString);
                TreeQuery2.Next;
                end;
                TreeQuery1.Next;
            end;
    二、调用刚才的函数,把返回的信息表写入文件,从文件中调入到TreeViewchengji中。
    MainSocketConnection.AppServer.GetTreeTable(fanwei,XJTreeTable, DATreeTable);
        ///////////////////////////////////
        AssignFile(XJTreeFile,'c:\chengji.ini');
        ReWrite(XJTreeFile);
        if (VarIsArray(XJTreeTable))then
        begin
            for iCount:=VarArrayLowBound(XJTreeTable,1) to VarArrayHighBound(XJTreeTable,1)do
            begin
                Writeln(XJTreeFile,XJTreeTable[iCount]);
            end;
        end;
        CloseFile(XJTreeFile);
        TreeViewchengji.LoadFromFile('c:\chengji.ini');
      

  8.   

    在CHANAGE事件中用Node:
    if (Node.Level =i)and(not Node.HasChildren ) then//i:integer;
       while not ADOQuery.Eof do
          begin
             New(PID);
             PID^:=ADOQuery.FieldByName('ID').AsString ;          (TreeView1.Items.AddChild(Node,ADOQuery.FIELDbYnAME('nAME').AsString ))
              .Data :=PID;         ADOQuery.Next ;
          end;
    你在新建是可以将其所在的层数存入数据库中,
    在查询时将Levle的只赋给变量i