每一层一个表就没有:
不过把 树和内容 分开两个表,用dxexpress dbtree 就可以根据第一个表显示整个tree,
就像资源管理器一样。

解决方案 »

  1.   

    控件 ExpressDBTree自己带有例子
      

  2.   

    我看了dexevpress 的那个样例,他可以显示很多层,但是他就一个表。把主表明细全放在一个表了。
      

  3.   

    这个不需要另外找控件吧,数据不在一个表里,你从三个表union出一个递归结构的视图不就可以了。
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vTreeNode1: TTreeNode;
      vTreeNode2: TTreeNode;
      vTreeNode3: TTreeNode;
    begin
      Table1.First;
      while not Table1.Eof do begin
        vTreeNode1 := TreeView1.Items.Add(TreeView1.TopItem, Table1.FieldByName('name').AsString);
        vTreeNode1.ImageIndex := Table1.FieldByName('image').AsInteger;
        Table2.Filtered := False;
        Table2.Filter := Format('bh=%s', [QuotedStr(Table1.FieldByName('bh').AsString)]);
        Table2.Filtered := True;
        Table2.First;
        while not Table2.Eof do begin
          vTreeNode2 := TreeView1.Items.AddChild(vTreeNode1, Table2.FieldByName('address').AsString);
          vTreeNode2.ImageIndex := Table2.FieldByName('image').AsInteger;
          Table3.Filtered := False;
          Table3.Filter := Format('cbh=%s', [QuotedStr(Table2.FieldByName('cbh').AsString)]);
          Table3.Filtered := True;
          Table3.First;
          while not Table3.Eof do begin
            vTreeNode3 := TreeView1.Items.AddChild(vTreeNode2, Table3.FieldByName('age').AsString);
            vTreeNode3.ImageIndex := Table3.FieldByName('image').AsInteger;
            Table3.Next;
          end;
          Table2.Next;
        end;
        Table1.Next;
      end;
    end;