怎样才能用TREEVIEW控件去表示一个数据库里的表的数据?
例如:
  在人员表里有:ID(人员ID) name(人员姓名) company(人员所属分公司)
deparment(人员所在部门)在树图中显示为:
+ --总公司
  |_____A分公司
  |    |______市场部
  |    |   |________张三
  |    |_______人事部
  |
  |______B分公司
       |______市场部
         |________李四请问各路高手这问题怎么解决?,还有就是有没有关于TREENODE的具体使用方法?
谢谢各位!!

解决方案 »

  1.   

    DEMO 和HELP目录里有例子F1 里 也有动态TREENODE 的具体使用方法。
      

  2.   

    第一,你的需求只有三级:分公司、部门、人员
    第二,问题开始简单,用递推算法,查询添加分公司节点->查询添加部门节点->查询添加人员结点,走完每条路线之后再返回。
    第三,利用几个临时变量,如:当前结点下的记录数、当前结点的句柄、父结点的句柄等,结点句柄利用TTreeNode类型定义。利用你的Query组件与算法完成你的程序吧!
      

  3.   

    定义一个表示树节点的类TNodeObject如下:
    Type
      TNodeObject = class(TObject)
        Id:integer;
        Name :string;
        company:string;
        deparment:string;
    end;  procedure makeTree;
      procedure MakeFirstLayer;
      procedure MakeSecondLayer(FatherNode :TTreeNode);
      procedure MakethirdLayer(FatherNode :TTreeNode);procedure Tform1.makeTree;
    var
      Root: TTreeNode;
    begin
      Root :=TreeView.Items.AddFirst(nil,'总公司') ;
      MakeFirstLayer;
    end;procedure Tform1.makeTree;
    var
      sql: string;
      rs: _Recordset;
      objNode: TNodeObject;
      childNode: TTreeNode;
      name: string;
    begin  
      sql := 'select distinct company from t_BaseInfor';
      rs := ADOConn.Execute(sql);
      while not rs.EOF do
      begin
        name := rs.Fields['company'].Value;
        childNode := TreeView.Items.AddChild(TreeView.Items.GetFirstNode, name);
        objNode := TNodeObject.Create;    
        objNode.company :=Name;    
        childNode.Data := objNode;
        MakeSecondLayer(childNode);
        rs.MoveNext;
      end;
      rs.Close;
    end;procedure Tform1.MakeSecondLayer(FatherNode: TTreeNode);
    var
      sql: string;
      rs: _Recordset;
      objNode: TNodeObject;
      childNode: TTreeNode;
      companyName ,name: string;
    begin
      companyName := TNodeObject(FatherNode.Data).company ;
      sql :='select distinct deparment from t_BaseInfor where company=''' +trim(companyName) +'''';
      rs := ADOConn.Execute(sql);
      while not rs.EOF do
      begin
        name := rs.Fields['deparment'].Value ;
        childNode := TreeView.Items.AddChild(FatherNode, name);
        objNode := TNodeObject.Create;
        objNode.company := TNodeObject(FatherNode.Data).company;
        objNode.deparment := name;
        childNode.Data := objNode;
        MakethirdLayer(childNode); 
        rs.MoveNext;
      end;
      rs.Close;
    end;procedure Tform1.MakethirdLayer(FatherNode: TTreeNode);
    var
      sql: string;
      rs: _Recordset;
      objNode: TNodeObject;
      childNode: TTreeNode;
      companyName,deparmentName,name: string;
      id :integer;
    begin
      companyName := TNodeObject(FatherNode.Data).company ;
      deparmentName :=TNodeObject(FatherNode.Data).deparment;  sql :='select ID, name from t_BaseInfor where company=''' +trim(companyName) +''' and deparment=''' +trim(deparmentName) +'''';
      rs := ADOConn.Execute(sql);
      while not rs.EOF do
      begin
        name := rs.Fields['name'].Value ;
        id  := rs.Fields['Id'].Value ;
        childNode := TreeView.Items.AddChild(FatherNode, name);
        objNode := TNodeObject.Create;
        objNode.company := TNodeObject(FatherNode.Data).company;
        objNode.deparment := TNodeObject(FatherNode.Data).deparment;
        objNode.id            := id;
        objNode.Name  :=Name;
        childNode.Data := objNode;
        rs.MoveNext;
      end;
      rs.Close;
    end;
      

  4.   

    http://expert.csdn.net/Expert/topic/2725/2725652.xml?temp=.6584284
      

  5.   

    1 读取数据库中的总公司,添加为topitem;
    2 读取数据库中的部门,添加为总公司的subitems;
    3 读取数据库中做有人员,分别添加到部门下面。难度不大,都是些基本功。
      

  6.   

    如果想简单的话可以用DevExpress的Grid控件,里面有一个DBTree,很好用,也简单,不用写代码!
    可以试一下的!!