表1:
dwdm  dwmc
10  aa
11  bb.......
表2:
dwdm bmdm bmmc
10   01   aaa
10   02   aaaa
11   01   bbb
11   02   bbbb
11   03   bbbbb.....
如何让数据显示成这个结果,谢谢了,分不够再加,急.在线等.......
aa
  aaa
  aaaa
bb 
  bbb
  bbbb 
  bbbbb

解决方案 »

  1.   

    unit fraTree;
    interface
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    DBTables, ImgList, Db, ComCtrls, ToolWin, ExtCtrls, frameSubRight,
    fraDetail,PubVar;
    type
    TFrameTree = class(TFrame)
    Splitter1: TSplitter;
    Panel1: TPanel;
    Tree: TTreeView;
    Panel2: TPanel;
    FrameDetail1: TFrameDetail;
    private
    public
    procedure LoadTree(treeDB:TDBDataSet);//初始化树
    procedure UpdateTree(curNode:TTreenode; nodeTxt:string; state:string);//更新树
    function GetNodeLevel(sFormat,sCode:string):integer;
    //获得节点层数
    end;
    implementation
    {$R *.DFM}
    procedure TFrameTree.LoadTree(treeDB:TDBDataSet);//初始化树
    var curID,nodeTxt:string;
    level,chindex,cnode,num:integer;
    mynode:array[0..6] of TTreenode;
    begin
    //初始化变量
    Screen.Cursor:=crHourGlass;
    tree.Enabled:=True;
    tree.Items.Clear;
    level:=0 ;
    num:=1;
    tree.items.clear;
    //设置根节点
    mynode[level]:=tree.items.add(Tree.Topitem,cTreeRootTxt);
    mynode[level].ImageIndex:=1;
    //遍历数据表,利用编码字段记录排序规律,依次添加树节点
    with treeDB do
    begin
    try
    if not Active then open;
    first;
    while not Eof do
    begin
    curID:=trim(FieldByName('dwbm').AsString);
    nodeTxt:=curID+'-'+trim(FieldByName('dwqc').AsString);
    level:=GetNodeLevel(cTreeCodeFormat,curID);
    //这里返回代码的层次数
    if level>0 then
    begin
    //增加下一节点时,用添加子节点的方法可轻松实现节点间的层次关系
    //注意:这里的父节点是用当前节点的上一级节点mynode[level-1]
    mynode[level]:=
    tree.items.addchild(mynode[level-1],nodeTxt);
    mynode[level].ImageIndex:=2;
    end;
    next;//下一条记录
    end;
    finally;
    close;
    End;
    mynode[0].expand(False);
    Screen.Cursor:=crHourGlass;
    end;
    end;
    function TFrameTree.GetNodeLevel(sFormat,sCode:string):integer;
    var i,level,iLen:integer;
    begin
    level:=-1 ;
    iLen:=0;
    if (sFormat<>'') and (sCode<>'') then
    for i:=1 to Length(sFormat) do //分析编码格式,找出当前代码层次
    begin
    iLen:=iLen+StrToInt(sFormat[i]);
    if Length(sCode)=iLen then
    begin
    level:=i;
    break;
    end;
    end;
    result:=level;
    end;
    //以下过程在新增、删除、修改记录时,同步更新树形结构
    procedure TFrameTree.UpdateTree(curNode:TTreenode; nodeTxt:string; state:string);
    Begin
    if state='add' then
    begin
    curNode:=tree.items.addchild(curNode,nodeTxt);
    curNode.ImageIndex:=2;
    end;
    if state='del' then curNode.delete;
    if state='edi' then curNode.Text:=nodeTxt;
    end;
    end.
      

  2.   

    procedure TForm1.createTree( anode:TTreeNode; pid:string) ;
    var
      sname:string;
      currname:string;
      id:string;
      currid:string;
    begin
      ADODataSet1.Active := false;
      adodataset1.CommandText := 'select idno,previdno,idname from TdgTest1 where previdno=' +
        QuotedStr(pid);
      adodataset1.active := true;  while not adodataset1.Eof do
      begin
        sname := adodataset1.fieldbyname('idname').asString;
        currname :=trim(sname);
        ANode :=Treeview1.items.addchild(anode,currname);
        id :=adodataset1.fieldbyname('idno').AsString;
        currid := id;
        createTree(Anode,id);
        ANode :=ANode.parent;    adodataset1.active := false;
        adodataset1.commandtext :=
        'select * '#13#10 +
        'from TdgTest1 '#13#10 +
        'where previdno=' + QuotedStr(pid);
        adodataset1.active := true;
        adodataset1.locate('idno',currid,[locaseinsensitive]);
        adodataset1.next;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);var
      t:TTreeNode;
      id:string;
    begin
      t := nil;
      id := '001';
       TreeView1.Items.Clear;
       createTree(t,id);
       TreeView1.SetFocus;
    end;end.idno,previdno,idname 
    002  001      部门
    003  002      人员
    004  003      张,
    你可以参照一个,以前做的,没有时间改你的,
      

  3.   

    短信中给我留个email吧,  我把一个详细应用发给你
      

  4.   

    在ListView 的 OnData 事件中处理,简单方便
      

  5.   

    好了,不过:
    edit2.text:=tree.Selected.Parent.Text;
    edit1.text:=tree.selected.text;
    这个的语句选中的是父节点,则程序出错,应该怎么写?
      

  6.   

    if tree.selected<>nil then edit1.text:=tree.selected.text;
    if tree.selected.parent<>nil then edit2.text:=tree.Selected.Parent.Text;