大虾们,请快帮帮小妹,急诊!(关于treeview,在线等待!!!) (50分)

  • 主题发起人 主题发起人 bluesea_sky
  • 开始时间 开始时间
B

bluesea_sky

Unregistered / Unconfirmed
GUEST, unregistred user!
[?] 主 题:大虾们,快帮帮,急诊!!!!!
sea
注册用户
发表数量:1
注册日期:2002-05-03
请问:现在有两个字段,怎样用递归函数实现两个字段的循环查询,并以树结构显示。
父项编码  子项编码
  101    011
  101    013
  101    022
  011    077
  011    079
  013    066
  022    018
  022    020
  077    086
  018    024
  018    016
其中在树中子项编码是父项编码的子结点显示。
多谢!!!!!!!
 
这是考我们脑子来了???
没工夫
 
看看下面的对你有没有帮助
procedure CreateSubTree( FNodeName: String; Node: TTreeNode=nil);
Var
mLocalName:String;
begin
Query.Close;
Query.SQL.Text := 'Select * from 表名 Where FatherNodeName = '''+FNodeName + '''';
Query.Open;
While not Query.Eof do
begin
mLocalName := Query.FieldbyName('LocalName').Asstring;
CreateSubTree(mLocalName, TreeView.AddChild (Node, mLocalName)); // 此处循环递归
Query.Next;
end;
end;
 
你是mm,我就回答
 
To 飘遥客
先谢你的指点,思路是可行,不过运行后没有出现结果,
也不知道是什么原因,我想主要是递归那步不行,请指教!!
 
[?]
跟 http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1081963 是一样的吧?
是什么问题?
 
我可以告诉你,但现在很忙!
 
代码中没有任何输出,当然什么都没有落!^_^
 
请问wlmmlw:怎么输出?
我要的结果是:  --101    
           |-011
|-077
|-086
|-079
          |-013
|-066
          |-022
        |-018
|-024
|-016
        |-020
       
当然还有更多层子结点。


 
用堆棧可以快速實現,Tstack,先進後出就可以了.
先進101,再找與101有關的,不就行了.
 
如果桌面上有一个文本框,edit.text是要查找的值,代码怎样写
 
to wen
对于堆棧我不是很熟。请指教!!
 
//下面是以往寫的顯示多層資產結構,
//可以控制任意層,並且可以在樹結點中邦定有關數據
TAsset_type=class
public
Type_id:string;
parent:String;
Type_no:String;
Type_name:String;
Types:String;
procedure setData(id,p,no,name,typs:string);
end;
---------
procedure LoadAssetType;
var
curNode:TtreeNode;
tmpNode:TtreeNode;
nodeData:TAsset_type;
Type_id:String;
Tado:Tadoquery;
begin
Treeview1.Items.Clear;
Astack:=TStack.Create;//建棧
curNode:=TreeView1.Items.Add(TreeView1.TopItem,FirstNodeTxt);
curNode.ImageIndex:=1;
curNode.Expanded:=true;
nodeData:=TAsset_type.Create;//建立treeview結點數據結構
nodeData.setData('00000','','',FirstNodeTxt,'A');//設定你的第一個結點
curNode.Data:=nodeData;//邦定結構
Astack.Push(curNode);//進棧
while Astack.Count>0 do
begin
curNode:=TTreeNode(Astack.Pop);//取出結構
Type_id:=TAsset_type(curNode.Data).Type_id;//取出父結點
//以下是查找出與父結點相同的結點來的.用你的重寫
Tado:=MainDataModule.GetData('select * from wsAsset_type where parent='+''''+type_id+''''+' order by type_id');
while not Tado.Eof do
begin
nodeData:=TAsset_type.Create;
nodeData.setData(Tado.fieldbyname('Type_id').asstring,
Tado.fieldbyname('parent').asstring,
Tado.fieldbyname('Type_no').asstring,
Tado.fieldbyname('Type_name').asstring,
Tado.fieldbyname('Types').asstring);
tmpNode:=TreeView1.Items.AddChild(curNode,nodeData.Type_no+' '+nodeData.Type_name);//建立樹結點
tmpNode.ImageIndex:=0;
tmpNode.Data:=nodeData;//邦定
Astack.Push(tmpNode);//重新入棧
Tado.Next;
end;
Tado.Close;
end;
Treeview1.TopItem.Expand(false);
end;
 
有点乱!!!
 
慢慢你會明白的.
 
飘遥客的方法应该可行,增加显示代码就可
 
有几个数据库控件用 自指表 来实现, 速度很快,并且和数据库结合,使用安全.
 
wzs1976:你好,请问显示代码怎么增加?在哪里增加?请说详细一点。
1Fuyi:你好,能不能说明的白一点,多谢!
 
怎么粉办,我还没有得出正确答案。
 
后退
顶部