http://expert.csdn.net/Expert/topic/2583/2583726.xml?temp=.5117914

解决方案 »

  1.   

    楼上的老兄还在啊,到这聊聊如何?
    http://expert.csdn.net/Expert/topic/2585/2585941.xml?temp=.6560022
      

  2.   

    已经有人给你回答的很清楚了,一般来说采用TtreeNodes的addchildobject方法,调用的参数如下:
    addchildobject(Parent: TTreeNode; const S: string; Ptr: Pointer): TTreeNode;
    parent:表示上一层节点。
    s     :表示要显示的字符串。
    Ptr:该节点要附加的信息。一般传递一个记录的指针。记录的使用:(声明一个名为Pxxx的记录)
    Pxxx=record
      id1:integer;
      id2:integer;
      ...其他记录成员
    end;Txxx=^Pxxx;  //把记录指向一个类。
    其他的,在你引用的文章中已经很清楚的解释了,请你好好看看。
      

  3.   

    PaPaCong兄台:
    我的写的代码你看了吗?不知有没有错误!是你说的方法吧!可为什么我在
    procedure TForm4.TreeView1Click(Sender: TObject)读出TV内容,总是显示最后加入的一个记录呀!
    procedure TForm4.TreeView1Click(Sender: TObject);
    begin
    ShowMessage(PMyRecord(Treeview1.Selected.Data).department_name);
    end;
      

  4.   

    [email protected]
    明天早上给你,前提你要把你的说明写完整;
    _____________________________________________________________________暮春三月,羊欢草长,天寒地冻,问谁饲狼?人心怜羊,狼心独怆,天心难测,世情如
    霜……{言有尽而意无穷,余意尽在不言中……}
      

  5.   

    谢谢大家的帮助。已经可以读出数据来了。
    可又遇到新问题了!
    这样作就没有问题,可以显示出来。
    procedure TForm4.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
    begin
      showmessage(Trim(PMyRecord(TreeView1.selected.data)^.department_id));
    end
    可这样为什么就不行,老是报错。
    procedure TForm4.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
    var
     aStr:string;
    begin
      aStr:=Trim(PMyRecord(TreeView1.selected.data)^.department_id);
      showmessage(aStr);
    end
    /*
    我要读出department_id的值,以此为检索条件(和上面的错误提示一样):
    aStr:='Select * From Worker ';
    aStr:=aStr+'Where work_department='+Trim(PMyRecord(TreeView1.selected.data)^.department_id)+';';
    ADOQbm.Connection:=MainForm.ADOConnection1;
    ADOQbm.SQL.Clear;
    ADOQbm.SQL.Add(aStr);
    ADOQbm.Prepared;
    ADOQbm.Open;
    */
    还有释放指针应该怎样作?用dispose()可以吗?
      

  6.   

    崩溃了!又是一天,问题还是没有解决!
    aStr:='Select work_id,work_name From worker';
    aStr:=aStr+' Where work_department='+Trim(PMyRecord(TreeView1.selected.data).department_id)+';';
    为什么会出错呀!用Showmessage(PMyRecord(TreeView1.selected.data).department_id)都可以显示出来数据。
      

  7.   

    department_id如果是数字,就用Integer类型,不要用string~~
    TreeView1.selected.data只能保存四个字节的内容~~
    一个string不定多少字节!~~
      

  8.   

    刚看了一下楼主的贴,没看太清楚,说一下,不知道对不对。
    动态生成Treeview时,new()的指针不能dispose(),不然的话,Treeview中的Data也会被dispose掉了。
      

  9.   

    procedure TForm4.TvCreate();
    var
      k,j:Integer;
      TNode,TNode_Root:TTreeNode;
    Begin
      ADOTable1.Active:=False;
      ADOTable1.Active:=True;
      ADOQuery2.Active:=False;
      ADOTable1.Open;
      TreeView1.Items.Clear;
      TNode_Root:=TreeView1.Items.Add(nil,'部门管理');
      For k:=1 To ADOTable1.RecordCount Do
        Begin
          new(p); //每加一个new一个~~ 
          p.department_id:=ADOTable1.FieldByName('department_id').AsString;
          p.department_name:=ADOTable1.FieldByName('department_name').AsString;
          TNode:=Treeview1.Items.AddChildObject(TNode_Root,p.department_name,p);
          ADOTable1.Next;
        End;
       ADOQuery2.Active:=False;
    End;//释放的时候~~
    var
      I: Integer;
    begin
      for I := 0 to TreeView1.Items.Count - 1 do
        if Assigned(TreeView1.Items[I].Data) then
          Dispose(PMyRecord(TreeView1.Items[I].Data));