我的表结构为 子系统编码,子系统名称,功能编码功能名称,一个子系统名称包含多个功能名称,
—子系统名称1
  功能名称1
  功能名称2
- 子系统名称2
  功能名称1
  功能名称2
 : 
 :
最好给出一些代码。多谢各位大侠,在线等待!

解决方案 »

  1.   

    自已写代码控制分层
    ADD&ADDCHILD
    或者改数据结构+用DXDBTREEVIEW
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s1,s2:string;
      node,subnode:TTreeNode;
      i,j,m,n,m1,m2:integer;
    begin
      m1:=0;
      m2:=0;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s1:=form1.Table1.FieldValues['子系统名称'];
          s2:=form1.Table1.FieldValues['功能名称'];
          m:=form1.TreeView1.Items.Count;
          if m>0 then
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s1 then
              begin
                m1:=m1+1;
                m2:=n;
              end;
            end;
            if m1=1 then
            begin
              subnode:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[m2],s2);
            end
            else
            begin
              node:=form1.TreeView1.Items.Add(nil,s1);
              subnode:=form1.TreeView1.Items.AddChild(node,s2);
            end;
          end
          else
          begin
            node:=form1.TreeView1.Items.Add(nil,s1);
            subnode:=form1.TreeView1.Items.AddChild(node,s2);
          end;
        end;
      end;
    end;
      

  3.   

    如果你想省事的话,推荐你用一个Developer Express Inc公司出的一个叫做dxDBTreeView的控件,很简单的,只需要设置几个属性值就可以使用了。
    但是使用TreeView也是可以实现的。
      

  4.   

    我的方法是:
       首先搜索出所有的‘子系统名称’,将它们一一添加到treeview中,然后将每一个‘子系统名称’在数据表中进行过滤,将搜索到的记录中的‘功能名称’添加到此‘子系统名称’的结点下。
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s1,s2:string;
      node,subnode:TTreeNode;
      i,j,m,n,m1,m2:integer;
    begin
      m1:=0;
      m2:=0;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s1:=form1.Table1.FieldValues['子系统名称'];
          s2:=form1.Table1.FieldValues['功能名称'];
          m:=form1.TreeView1.Items.Count;
          if m>0 then
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s1 then
              begin
                m1:=m1+1;
                m2:=n;
              end;
            end;
            if m1=1 then
            begin
              form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[m2],s2);
              m1:=0;
            end
            else
            begin
              node:=form1.TreeView1.Items.Add(nil,s1);
              form1.TreeView1.Items.AddChild(node,s2);
            end;
          end
          else
          begin
            node:=form1.TreeView1.Items.Add(nil,s1);
            form1.TreeView1.Items.AddChild(node,s2);
          end;
          form1.Table1.Next;
        end;
      end;
    end;
      

  6.   

    一个相近结构的例子.////////////////////////////////////////////////////////////
    //////////数据库结构:                            //////////
    //////////department: name:部门名称,char         //////////
    //////////            d_no:部门号,int            //////////
    //////////worker:     name:员工姓名,char         //////////
    //////////            w_no:员工号,int            //////////
    //////////            d_no:部门号,int            //////////
    ////////////////////////////////////////////////////////////
    /////////////显示效果:                            //////////
    /////////////部门1                                //////////
    /////////////  员工1                              //////////
    /////////////  员工2                              //////////
    /////////////  ...                                //////////
    /////////////部门2                                //////////
    /////////////  员工1                              //////////
    /////////////  员工2                              //////////
    /////////////  ...                                //////////
    /////////////...                                  //////////
    ////////////////////////////////////////////////////////////
    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.