如何用treeview显示出层次结构,数据在数据库中
表:部门结构
部门ID      部门名       上级部门
1           A                 
2           B             A
3           C             A
4           D             B
5           E             B
......A为顶层部门,B和C是A的下属部门,D和E是B的下属部门......
将这个关系用treeview表示,要怎么写?

解决方案 »

  1.   

    1)按部门名遍历记录,建立其顶级接点Node
    2)遍历“上级部门”是该部门的记录,建立Node的子节点
      

  2.   

    能给出点代码吗?
    我刚接触delphi不久,对许多控件不是很熟悉
      

  3.   

    Function  TFrm_qcsp.AddNode(TreeView:TTreeview;Node:TTreeNode;ADOQ:TADOQuery):TTreeNode;
    var
      Node1:TTreeNode;
      s:PString;
    begin
      Node1:=TreeView.Items.AddChild(Node,ADOQ.FieldByName('flmc').Text);
      New(s);
      s^:=ADOQ.FieldByName('id').Text;
      Node1.Data:=s;
      Result:=Node1;
    end;Function  TFrm_qcsp.SearchNode(TreeView:TTreeView;Txts:String):TTreeNode;
    var
      i:integer;
      s:PString;
    begin
      Result:=nil;
      For i:=0 To TreeView.Items.Count-1 Do
        begin
          s:=TreeView.Items[i].Data;
          If s^=Txts Then
            begin
              Result:=TreeView.Items[i];
              Exit;
            end;
        end;
    end;
    procedure TFrm_qcsp.formshow(Sender: TObject);
    var
      i,Rec_Num:integer;
      Node1,Node2:TTreeNode;
      var s_sql1,s_sql2:string;
    begin
      TreeView1.Items.Clear;
      TreeView1.Items.BeginUpdate;
      Node1:=TreeView1.Items.GetFirstNode;
      with adoquery4 do
        begin
          close;
          sql.Clear;
          sql.Add('select * from tba_flbm order by id');
          open;
        end;
      If ADOquery4.RecordCount>0 Then
      Begin
        Rec_Num:= ADOQuery4.RecordCount;
        For i:=0 To Rec_Num-1 Do
        begin
          If ADOQuery4.FieldByName('parent').Text='0' Then
            Node2:=AddNode(TreeView1,Node1,ADOQuery4)
          Else
            begin
              Node2:=SearchNode(TreeView1,ADOQuery4.FieldByName('parent').Text);
              If Node2<>nil Then
                AddNode(TreeView1,Node2,ADOQuery4);
            end;
            ADOQuery4.Next;
          end;
       End;
       TreeView1.Items.EndUpdate;
       If ADOquery4.RecordCount>0 Then
        self.TreeView1.Items[0].Expanded:=true;
    ---------
      

  4.   

    建议:先选出"上级部门"为空的,即最顶级的记录,添加到treeview,然后在treeview的onexpanding事件中每展开一个节点时,读取属于该节点的下级记录并添加到treeview,依次类推