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值。
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;
我已经建造了一个动态的树,我点击节点时要怎样才能取出对应这个节点数的值 .
数据库表有 parentcord,parentname,childcord,childname 4个字段,但parentcord 这个字段有相同的值,parentname这个字段可以为空值! 高手请帮帮忙,请详细点说好吗,小弟很菜!!多谢!
s := TreeView1.Selected.Text
ShowMessage(s);
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));
谢谢你回答我的问题,但我不过用的是ClientDataSet这个控件,我同样也是用你上面这种方法,但不过所指的地址不对!
请问还有什么别的好办法吗!
我的思路是根据 parentcord 和 childcord 这两个字段来判断唯一性,但我要怎样才能取出这个字段所对应的值呢!
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值。
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;