1、数据库是这样的     
      DEPID  ParentID  DepName     IndexLevel
        1 6907 1
2 合美 1
3 天地宽 1
9 离退让 1
11 1 公司办公室 2
13 1 财务部 2
15 1 规划发展部 2
17 1 市场部 2
19 1 企业管理部 2
21 1 十五工程办 2
23 1 机动部 2
25 1 技术中心 2
27 1 质量部 2
29 1 物业部 2
31 1 物资部 2
33 1 生产制造部 2
41 1 其他人员 2
51 2 三佳 2
53 2 合美公司 2
60 2 武赛 2
91 9 内部退养 2
92 9 退休 2
93 9 离休 2
111 11 汽车队 3
171 17 军品销售室 3
172 17 市场营销室 3
173 17 北京办事处 3
211 21 现场管理 3
231 23 综合管理室 3
232 23 电修室 3
233 23 机修室 3
234 23 运行班 3
251 25 电器设计室 3
252 25 工艺设计室 3
253 25 结构设计室 3
254 25 整机设计室 3
255 25 综合管理室 3
256 25 总体设计室 3
271 27 电器检验室 3
272 27 计量室 3
273 27 结构检验室 3
274 27 质量管理室 3
275 27 综合试验室 3
291 29 保卫室 3
292 29 居委会 3
293 29 物业管理室 3
294 29 医务室 3
311 31 仓库管理班 3
312 31 计划采购室 3
331 33 一车间 3
332 33 二车间 3
333 33 三车间 3
334 33 车辆工段 3
335 33 计划调度室 3
336 33 技术工艺室 3
411 41 借调 3
412 41 待岗 3
511 51 办公室 3
513 51 采购部 3
515 51 市场部 3
517 51 技术部 3
519 51 生管部 3
521 51 SMN 3
523 51 生技 3
525 51 品管 3
527 51 生产部 3
3311 331 办公室 4
3312 331 车工班 4
3313 331 冲剪班 4
3314 331 窗框班 4
3315 331 焊工班 4
3316 331 钳工一班 4
3317 331 钳工二班 4
3318 331 铣工班 4
3321 332 办公室 4
3322 332 磷化班 4
3323 332 喷漆班 4
3324 332 喷塑班 4
3331 333 办公室 4
33310 333 粘接层压班 4
3332 333 电调班 4
3333 333 电准班 4
3334 333 缝纫班 4
3335 333 骨架班 4
3336 333 木工班 4
3337 333 内装班 4
3338 333 外装班 4
3339 333 准备班 4
2、IndexLevel表示节点深度,DepName部门名称,ParentID父节点的DepID,DEPID表示部门的ID
3、如何形成一个树,求一个树的算法

解决方案 »

  1.   

    上面表的内容是利用query在数据库中提取的。
      

  2.   

    动态创建treeview。根据数据库内容创建子节点这样吧。自己思考下吧------------------------------------------
    酷得组件仓库 - 第三方软件开发组件下载\试用
    www.cookcode.net
      

  3.   

    用dev的DBTreeView,不用写代码的
      

  4.   

    //======================================
    //procedure TreeAddChild(Node:TTreeNode;DataSet:TDataSet;KeyName,TextName:string;Sign:integer;ImageIndex,SelectIndex,StateIndex:integer);
    //功  能:在树视图中增加主子节点
    //参  数:Node:增加到节点
    //        DataSet:数据集
    //        KeyName:主键名称
    //        TextName:显示的字段名称
    //        Sign:节点标志
    //        ImageIndex:节点默认图标索引
    //        SelectIndex:节点选中图标索引
    //        StateIndex:节点状态图标索引
    //返回值:无
    //======================================
    procedure TreeAddChild(TV:TTreeView;Node:TTreeNode;DataSet:TDataSet;KeyName,TextName:string;Sign:integer;ImageIndex,SelectIndex,StateIndex:integer);
    var
      AddNode:TTreeNode;
      NodeText:String;
      i:Integer;
      NodePtr:PNodeIntKey;
      TempNode:array of TTreeNode;
      NodeNum:integer;
      DeptNO:string;
    begin
      if Node = nil then
      begin
        NodeNum:=0;
        with DataSet do
        begin
          Dataset.Filter:='MasterID=0';
          while not Eof do
          begin
            New(NodePtr);
            NodePtr^.KeyID:=FieldByName(KeyName).AsInteger;
            NodePtr^.Sign:=Sign;
            NodePtr^.SignType:=0;
            if KeyName='DeptID' then
            begin
              DeptNO:=Trim(FieldByName('DeptNO').AsString);
              NodeText:='['+DeptNO+']'+Trim(FieldByName(TextName).AsString);
            end
            else
              NodeText:=Trim(FieldByName(TextName).AsString);
            AddNode:=TV.Items.AddObject(nil,NodeText,NodePtr);
            AddNode.ImageIndex:=ImageIndex;
            AddNode.SelectedIndex:=SelectIndex;
            AddNode.StateIndex:=StateIndex;
            NodeNum:=NodeNum+1;
            SetLength(TempNode,NodeNum);
            TempNode[NodeNum-1]:=AddNode;
            Next;
          end;
        end;
        for i:=0 to NodeNum-1 do TreeAddChild(TV,TempNode[i],DataSet,KeyName,TextName,Sign,ImageIndex,SelectIndex,StateIndex);
      end
      else begin
        if not Node.HasChildren then
        begin
          with DataSet do
          begin
            Dataset.Filter:='MasterID='+IntTostr(PNodeIntKey(Node.Data)^.KeyID);
            while not Eof do
            begin
              New(NodePtr);
              NodePtr^.KeyID:=FieldByName(KeyName).AsInteger;
              NodePtr^.Sign:=Sign;
              NodePtr^.SignType:=0;
              if KeyName='DeptID' then
              begin
                DeptNO:=Trim(FieldByName('DeptNO').AsString);
                NodeText:='['+DeptNO+']'+Trim(FieldByName(TextName).AsString);
              end
              else
                NodeText:=Trim(FieldByName(TextName).AsString);
              AddNode:=Node.Owner.AddChildObject(Node,NodeText,NodePtr);
              AddNode.ImageIndex:=ImageIndex;
              AddNode.SelectedIndex:=SelectIndex;
              AddNode.StateIndex:=StateIndex;
              Next;
            end;
          end;
        end;
        for i:=0 to Node.Count-1 do   TreeAddChild(TV,Node.Item[i],DataSet,KeyName,TextName,Sign,ImageIndex,SelectIndex,StateIndex);
      end;
    end;不懂问我QQ:396638838