我做的是3层的树结构,怎么跟表做关联呢?就是鼠标选中树的一项,在表中相应的显示,我是菜鸟,高手帮帮忙啊!!多谢了!

解决方案 »

  1.   

    我有COM+的代码,在多了怎么发给你啊?!
    主要就是在
    procedure TFrmRole.TreeExpanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    begin
      GetClass(Node);
      AllowExpansion:=True;
    end;
    写东西,刷新ClientDataSet!
      

  2.   

    procedure TFrmRole.TreeDblClick(Sender: TObject);
    var
     Flag:Boolean;
     I:Integer;
    begin
      inherited;
      GoodOrgDataSet.Data:=Null;
      GoodOrgparentDataSet.Data:=Null;
      ShowTopGrid;
      Flag:=True;  { has  distributed Organ_ID's Role? *@-@ Snake_Eye}
      if (Tree.Selected.Level=0) then
       begin
         GoodOrgparentDataSet.First;
         while not GoodOrgparentDataSet.Eof do
          begin
            if (GoodOrgparentDataSet.FieldByName('ROLE_MAX_NUM').AsInteger)=0 then
              begin
               Flag:=False;
               Break;
              end;
          GoodOrgparentDataSet.Next
          end;
       end;
      if Flag then
       begin
        ShowGrid;
       end
      else
       GoodOrgDataSet.Active:=False;
      if (Tree.Selected.Level=0) and (not Flag) then
        StaticText2.Caption:='[请先分配'+Trim(Copy(Tree.Selected.Text,Pos(' ',Tree.Selected.Text),255))+'的角色]';  PraentGridDBTableView1.ClearItems;
      cxGridDBTableView1.ClearItems;
      PraentGridDBTableView1.DataController.CreateAllItems;
      cxGridDBTableView1.DataController.CreateAllItems;  if (not VarIsNull(GoodOrgparentDataSet.Data)) and (not VarIsEmpty(GoodOrgparentDataSet.Data)) then
        begin
          for I:=0 to GoodOrgparentDataSet.FieldCount-1 do
             PraentGridDBTableView1.Columns[I].Options.Editing:=False;
          if Tree.Selected.Level=0 then
             PraentGridDBTableView1.Columns[4].Options.Editing:=True;
          PraentGridDBTableView1.Columns[4].Styles.Header:=stSnake;
        end;   if (not VarIsNull(GoodOrgDataSet.Data)) and (not VarIsEmpty(GoodOrgDataSet.Data)) then
        begin
          for I:=0 to GoodOrgDataSet.FieldCount-1 do
            cxGridDBTableView1.Columns[I].Options.Editing:=False;
          cxGridDBTableView1.Columns[2].GroupIndex:=1;
          cxGridDBTableView1.Columns[4].Styles.Header:=stSnake;
          cxGridDBTableView1.Columns[4].Options.EditIng:=True;
          cxGridDBTableView1.Columns[2].Visible:=False;
          cxGridDBTableView1.DataController.Groups.FullExpand;
        end;
       {Setting  Save Button @-@*Snake_Eye}
       if Tree.Selected.Level=0 then
          SaveParent.Enabled:=true
       else
          SaveParent.Enabled:=False;end;
      

  3.   

    我的树时3层的
    var
      lnode,lnode1,lnode2:TTreeNode;
      i,j,lfloorcount,lunitcount:integer;  Function GetSqlWhere(lNode:TTreeNode):string;
      var
        lNode1:TTreeNode;
        lstrwhere:string;
        lendPos:integer;
      begin
        lNode1:=lNode;
        lstrwhere:=' 1=1 ';
        result:='';
        while lNode1<>nil do
        begin
          lendPos:=pos('号楼',lNode1.Text);
          if lendpos>0 then
            lstrwhere:=lstrwhere+' and '+' FLOORNO='''+Copy(lNode1.Text,1,lendpos-1)+'''';
          lendPos:=pos('单元',lNode1.Text);
          if lendpos>0 then
            lstrwhere:=lstrwhere+' and '+' CELL='''+Copy(lNode1.Text,1,lendpos-1)+'''';
          lendPos:=pos('宿舍',lNode1.Text);
          if lendpos>0 then
            lstrwhere:=lstrwhere+' and '+' DORMITORY='''+Copy(lNode1.Text,1,lendpos-1)+'''';
          lNode1:=lNode1.Parent;
        end;
          if lstrwhere<>'1=1' then result:=' where '+lstrwhere
          else result:='';
      end;
      procedure nodechild(lnode:TTreenode;level:integer);
      var
        lNode1:TTreeNode;
        i:integer;
        lsql,ltext,lsqlwhere:string;
      begin
        with DataModule1.ADOQuery_Temp do
        begin
          Active:=false;
          Sql.Clear;
          lsql:='';
          case level of
            1:begin
               lsql:=' select distinct(FLOORNO)';
               ltext:='号楼';
              end;
            2:begin
                lsql:=' select distinct(CELL)';
                ltext:='单元';
              end;
            3:begin
                lsql:=' select distinct(DORMITORY)';
                ltext:='宿舍';
              end;
          end;
          lsql:=lsql+' from GYGL_SSQK';
          if lnode<>nil then
          begin
            lsqlwhere:=GetSqlWhere(lNode);
            if lsqlwhere<>'' then
              Sql.Add(lsql+lsqlwhere)
            else exit;
          end
          else Sql.Add(lsql);
          Active:=true;
          if (RecordCount<=1) and (Fields[0].asstring='') then exit;
          lNode1:=lNode;
          First;
          lNode1:=TreeView1.Items.AddChild(lNode1,Fields[0].asstring+ltext);
          Next;
          for i:=1 to RecordCount-1 do
          begin
            lNode1:=TreeView1.Items.Add(lNode1,Fields[0].asstring+ltext);
            Next;
          end;
        end;
      end;
    begin
      lNode:=nil;
      nodechild(lnode,1);
      lfloorcount:=TreeView1.Items.Count;
      lnode:=TreeView1.Items.GetFirstNode;
      for i:=0 to lfloorcount-1 do
      begin
        lnode1:=lnode;
        nodechild(lnode1,2);
        lunitcount:=lnode.Count;
        if lunitcount<=0 then
        begin
          lnode1:=lnode;
          lnode2:=lnode1;
          nodechild(lnode2,3);
        end
        else
          lnode1:=lnode.getFirstChild;
        for j:=0 to lunitcount-1 do
        begin
          lnode2:=lnode1;
          nodechild(lnode2,3);
          lNode1:=lNode1.getNextSibling;
        end;
        lNode:=lNode.getNextSibling;
      end;
    end;