如:
 --总经理室
 ------总经理
 ------副总经理
 --经理室
 ------经理
 --部门
 -------软件开发部
 -------市场部
 -------销售部

我要的是按如:总经理,就把总经理的资料调出来,用DBGRID显示,按总经理室或部门等不显示其内容,要怎么写呢?请赐教!

解决方案 »

  1.   

    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Node.HasChildren then
      begin
        //
      end;
    end;
      

  2.   

    这个挺容易的呀,你先把树建起来,不知道你的这个是不是动态的,如果是就用循环来读
    如果不是,就是当TreeNode被点中时,得到它的Text,再把这个Text进数据库里select出来,table或query open一下,DBGrid就显示出来了
      

  3.   

    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Node.HasChildren then
      begin
        //把它的Text,再把这个Text进数据库里select出来,table或query open一下,DBGrid就显示出来了  end;
    end;
      

  4.   

    2楼的可以 ,加not
    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if not Node.HasChildren then
      begin
        with adoquery do
        begin
           close;
           sql.text:='select * from table where name='''+TreeView1.Selected.Text+'''';
           open;
        end;
      end;
    end;
      

  5.   

    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Node.Text = '总经理' then 
      begin
        ....
      end;
    end;
      

  6.   

    procedure TPartyOrgDM.WriteToTreeview(First:boolean;
            treename: Ttreeview;Fathernode:Ttreenode;AAString:string);
    var childnode:Ttreenode;
        BString:string;
        query:TAdoquery;
        CString:string;
    begin
      Query:=Tadoquery.Create(owner);
      query.Connection:=ADOConnectionDM.ADOConnection1;
      query.LockType:=ltReadOnly;
      GetInfo(ID);从数据库中取相关信箱
      BString:=Adoqry.fieldbyname('A').asstring;
      treename.Items.BeginUpdate;
      if First  then
      begin  
        treename.Items.Clear;
        Fathernode:=treename.Items.add(nil,BString); //N级的开始
      end;
      if DisplayNextOrg(query,AAString) then
      begin
        while not query.Eof do
        begin
          CString:=trim(query.fieldbyname('abc').asstring);
          if (CString<>'17') and (CString<>'18') then
          begin        
            BString:=query.fieldbyname('B').asstring;
            childnode:=treename.Items.addchild(Fathernode,BString);   //N+1级
            WriteToTreeview(false,treename,childnode,cbname,AString);
          end;
          query.next;
        end;
      end;
      query.Destroy;
      treename.Items.EndUpdate;
    end;//注意相关字段
      

  7.   

    不知道你是否装有fastReport组件,若装了,在它的demo中有个叫report的文件夹,它的实例程序可以很好的满足你的要求,
    其中的关键代码如下:
    procedure TForm1.Tree1Change(Sender: TObject; Node: TTreeNode);
    var
      n: Integer;
    begin
      n := Node.StateIndex;
      if n = -1 then
      begin
        ......
      end
      else if n = 15 then
      begin
       .....
      end;
      with Form2.frReport1 do
      begin
        LoadFromFile(WPath + IntToStr(n) + '.frf');
        if Dictionary.Variables.IndexOf('Description') <> - 1 then
          Memo1.Text := Dictionary.Variables['Description'] else
          Memo1.Text := '';
        DesignBtn.Enabled := True;
        PreviewBtn.Enabled := True;
      end;
    end;
    不过,你别忘了在每一个节点中设定一个StateIndex值,自己设定。
      

  8.   

    function Tthrgzzxbzhwhfrm.ResultString(IntValue : Integer): String;
    begin
      Case QueryComboBox.ItemIndex of
      0 : Result := 'zxbzh';
      1 : if IntValue = 0 then
            Result :=  'zw' else
            Result := 'zxbzh';
      2 : if IntValue = 0 then
            Result := 'zc' else
            Result := 'zxbzh';
      end;
    end;procedure Tthrgzzxbzhwhfrm.TreeView1Click(Sender: TObject);
    var
      FieldName : String;
      FieldValue : String;
    begin
      FieldName := ResultString(TreeView1.Selected.Level);
      FieldValue := TreeView1.Selected.Text;
      PublicClass.OpenSQL(DataModuleFrm.bhzADOQuery,'Select * From thrgzinfwh where'
        + '  ' + FieldName + ' = ' + #39 + FieldValue + #39);
    end;看一看这个是否有用?
    说明:
    ResultString  这个函数根据不同的选择来决定对应的字段是什么。我之前写的是这样的:一个TreeVeiw里又有三种不同的排序方式,选择不同的排序方式时,那么树就要重排,如果你激活OnClick的时候,要先判断它的排序方式,再进行查询。如上。
      

  9.   

    改了一下;
    function Tthrgzzxbzhwhfrm.ResultString(IntValue : Integer): String;
    begin
      if IntValue=0 then
        Result := FieldName1;//字段1,就是总经理室所对应的FieldName;如部门
      if IntVlaue = 1 then
        Result := FieldName2;//字段2,就是经理所对应的FieldName  ,如职位
    end;procedure Tthrgzzxbzhwhfrm.TreeView1Click(Sender: TObject);
    var
      FieldName : String;
      FieldValue : String;
    begin
      FieldName := ResultString(TreeView1.Selected.Level);
      FieldValue := TreeView1.Selected.Text;
      PublicClass.OpenSQL(DataModuleFrm.bhzADOQuery,'Select * From thrgzinfwh where'
        + '  ' + FieldName + ' = ' + #39 + FieldValue + #39);
    end;
      

  10.   

    动态生成树。我可不是来枪分啊!
    procedure TPublicClass.TreeViewAddT(MFieldStr, DFieldStr,
      TableNameValue: String; Sender: TTreeView; ImageValue: TImageList);
    var
      PNode , CNode : TTreeNode;
      I : Integer;
    begin
      Sender.Items.Clear;
      Sender.Images := ImageValue;
      With DataModuleFrm.Temp1ADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add('Select Distinct ' + MFieldStr + ' from ' + TableNameValue);
        Prepared;
        Open;
        First;
        While Not Eof do
        begin
          PNode := Sender.Items.AddChild(Nil,Trim(FieldByName(MFieldStr).AsString));
          PNode.ImageIndex := 0;
          if PNode.Level = 1 then
          begin
            PNode.ImageIndex := 2;
            Pnode.StateIndex := 4;
          end; {}
          Next;
        end;
      end;
      With DataModuleFrm.LSB_ADOQuery do
      begin
        Sender.SetFocus;
        For I := Sender.Items.Count -1 DownTo 0 do
        begin
          PNode := TTreeNode.Create(Nil);
          PNode := Sender.Items[I];
          if Active then
            Active := False;
          SQL.Clear;
          SQL.Add('Select ' + DFieldStr + ' from ' + TableNameValue + ' Where ' +
            MFieldStr + ' = ' + #39 + Sender.Items[I].Text + #39);
          Prepared;
          Open;
          First;
          While Not Eof do
          begin
            CNode := Sender.Items.AddChild(PNode,Trim(FieldByName(DFieldStr).AsString));
            CNode.ImageIndex := 1;
            if PNode.Level = 1 then
            begin
              PNode.ImageIndex := 2;
              Pnode.StateIndex := 4;
            end;{}
            Next;
          end;
        end;
      end;
      

  11.   

    同意: gwsr(咩咩) 
    有问题请发信息到我的E-mail:[email protected]