treeview显示层级菜单的问题(300)

  • 主题发起人 主题发起人 luoyanqing119
  • 开始时间 开始时间
L

luoyanqing119

Unregistered / Unconfirmed
GUEST, unregistred user!
想实现用treeview显示数据库听关联三层级别的关系统菜单,两层以经OK了。但是取到第三层,数据有,但是就是加不进treenode中去,大家有没有遇到过这种问题。我目前的函数情况procedure TFrm_User_Part.myshow(TreeV : TTreeView; ADOQuer,ADOQuer1,ADOQuer2: TADOQuery; S,NTable,NField : String; N : TTreeNode; P : Integer);var // TreeV表示树,ADOQuer,ADOQuer1数据源,S表示副键值,NTable表示表名,NField表示字段名,N表示节点,P表示是否查询了节点 i : integer; TempNode,TT11:TTreeNode; CRMRecord,CRMRecord1:PCRMRecord; S1 : String;begin S1 := ''; if Length(NField)>0 then S1 := ' and '+NField+'='+''''+PartName+'''' else S1 := ''; with ADOQuer do begin close; SQL.Clear; SQL.Add('select * from '+NTable+' where FU_ID='+''''+S+''''+S1); open; end; for i:=0 to ADOQuer.RecordCount-1 do begin TempNode := TreeV.Items.AddChild(N,ADOQuer.FieldByName('Tree_Name').AsString); New(CRMRecord); CRMRecord.ID := ADOQuer.FieldByName('Zhu_ID').AsString; TempNode.Data := CRMRecord; if p=0 then begin with ADOQuer1 do begin close; SQL.Clear; SQL.Add('select * from '+NTable+' where FU_ID='+''''+ADOQuer.FieldByName('Zhu_ID').AsString+''''+S1); Open; First; end; while not ADOQuer1.Eof do begin TT11:=TreeV.Items.AddChild(TempNode,ADOQuer1.FieldByName('Tree_Name').AsString); New(CRMRecord1); CRMRecord1.ID := ADOQuer1.FieldByName('Zhu_ID').AsString; TT11.Data := CRMRecord1; with ADOQuer2 do begin close; SQL.Clear; SQL.Add('select * from '+NTable+' where FU_ID='+''''+ADOQuer1.FieldByName('Zhu_ID').AsString+''''+S1); Open; First; end; while not ADOQuer2.Eof do begin TreeV.Items.AddChild(TT11,ADOQuer2.FieldByName('Tree_Name').AsString); //TreeV.Items.Add(TT11,''); ShowMessage(ADOQuer2.FieldByName('Tree_Name').AsString); //以经有要出的值显示 ADOQuer2.Next; end; ADOQuer1.Next; end; end; ADOQuer.Next; end;end;分不是问题,有更好的回答可以先开贴放分
 
函数虽然很长,但是没多少东西.
 
有看过vcl的关于这几个函数的源码,应该不是代码问题吧function TTreeNodes.AddChild(Parent: TTreeNode; const S: string): TTreeNode;begin Result := AddNode(nil, Parent, S, nil, naAddChild);end;function TTreeNodes.AddChildObject(Parent: TTreeNode; const S: string; Ptr: Pointer): TTreeNode;begin Result := AddNode(nil, Parent, S, Ptr, naAddChild);end;function TTreeNodes.AddFirst(Sibling: TTreeNode; const S: string): TTreeNode;begin Result := AddNode(nil, Sibling, S, nil, naAddFirst);end;function TTreeNodes.AddObjectFirst(Sibling: TTreeNode; const S: string; Ptr: Pointer): TTreeNode;begin Result := AddNode(nil, Sibling, S, Ptr, naAddFirst);end;
 
为什么不用递归解决呢?
 
昨天以经解决了,也是用的递归。-------------不过,还是谢谢楼上。晚一点把解决方法发过来,顺便结贴
 
我没给出答案 只是说了建议。。。一下子就给了我这么多分,,脸红中~~~
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
503
import
I
I
回复
0
查看
594
import
I
I
回复
0
查看
515
import
I
后退
顶部