Delphi 高手:`

解决方案 »

  1.   

    Delphi  高手:
       我已经建造了一个动态的树,我点击节点时要怎样才能取出对应这个节点数的值 . 
       数据库表有 parentcord,parentname,childcord,childname 4个字段,但parentcord 这个字段有相同的值,parentname这个字段可以为空值!   高手请帮帮忙,请详细点说好吗,小弟很菜!!多谢!
      

  2.   

    获得选中节点的值
     s := TreeView1.Selected.Text
     ShowMessage(s);
      

  3.   

    生成树时使用AddChildObject和AddObject把数据库中的数据加到树中,下面是例子:
    type
      PMyRecord = ^MyRecord;
      MyRecord = record
               ID : integer;
               name:string;
               ParentID : integer;
               end;//end of recordp : PMyRecord;new(p);
    p.ID := ADOQuery1.FieldByName('ID').AsInteger;
    p.name := ADOQuery1.FieldByName('部门名称').AsString;
    p.ParentID := ADOQuery1.FieldByName('上级部门ID').AsInteger;
    TreeView1.Items.AddChildObject(Node,p.name,p);
    //dispose(p);//一定要去掉这条语句,不然的话,Treeview中的Data也被dispose掉了。得到Tree节点所对应数据库的值:
    showmessage('选中节点的ID为:' +
                  inttostr(PMyRecord(Treeview1.Selected.Data).ID) +
                  #13 + #10 + '名称为:' +
                  PMyRecord(Treeview1.Selected.Data).name +
                  #13 + #10 + '上级部门ID为:' +
                  inttostr(PMyRecord(Treeview1.Selected.Data).ParentID));
      

  4.   

    dulei 您好!
      谢谢你回答我的问题,但我不过用的是ClientDataSet这个控件,我同样也是用你上面这种方法,但不过所指的地址不对!
      请问还有什么别的好办法吗!
      我的思路是根据 parentcord 和 childcord 这两个字段来判断唯一性,但我要怎样才能取出这个字段所对应的值呢!
      

  5.   

    implementation
      uses unit1;
    {$R *.dfm}type
      PMyRecord = ^MyRecord;
      MyRecord  = record
             department_id:string;
             department_name:string;
    end;var
      p:PMyRecord;procedure TForm4.TvCreate();
    var
      k,j:Integer;
      TNode,TNode_Root:TTreeNode;
    Begin
      new(p);
      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
          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;作出来的达不到我需要效果呀!点击选取的值是最后一个的department_id呀!而我需要点那个出来那个的department_id值。
      

  6.   

    shpxxADOQuery.Close;
        shpxxADOQuery.SQL.Clear;
        if leibei.Selected.IsFirstNode then
        begin
          shpxxADOQuery.SQL.Add('select * from shpxx');
          shpxxADOQuery.Open;
        end
        else
        begin
          //如果有子树的话
          if leibei.Selected.HasChildren then
          begin
            shpxxADOQuery.SQL.Add('select * from SHPXX where DL_ID='+''''+inttostr(leibei.Selected.Index+1)+'''');
            shpxxADOQuery.Open;
          end
          else
            if not(leibei.Selected.Parent.IsFirstNode) then
            begin
              shpxxADOQuery.SQL.Add('select * from SHPXX where XL_ID='+''''+inttostr(leibei.Selected.Parent.Index+1)+inttostr(leibei.Selected.Index+1)+'''');
              shpxxADOQuery.Open
            end;    end;