S
sun.sir
Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
我想用数据表Categor(ParentCategoryId,CategoryId,CategoryDesc)和Treeview控件来实现商品目录树!请问实现该目标的最佳途径是用何种方法来实现(即生成树的效率最高!)
下面是我写的一个递归算法!它没有实现我的想法,请哪位大虾来搞定它!并且我在递归中用了二个SQL语句,是否会很影响效率,请协助我进行分析!
兄弟们,我实在是囊中羞涩,只能给本问题50分了!等我发财了,会多多回报你们的!
目标:
+--商品
+--软件
+--S001
| +--S00101
| | +--S0010101
| |--S00102
| +--S0010201
+--S002
|
+--S003
+--S00301
本人的递归算法的结果:
+--商品
+--软件
+--S001
| +--S00101
| | +--S0010101
| |--S00102
|
+--S002
|
+--S003
procedure TCategoryf.DispTree(CatId:integer;Nodex:TTreeNode);
Var MyNode:TTreeNode;
var i:integer;
begin
With AQry1 do
begin
Close;
SQL.clear;
Sql.Add('Select * from Categories where ParentCategoryId='+Inttostr(CatId));
open;
if Recordcount<>0 then Nodex.Selected:=true;
While Not Eof do
begin
tvw.Items.AddChildObject(Tvw.Selected,Fieldbyname('CategoryDesc').asstring);
next;
end;
First;
While not Eof do
begin////
With AQry2 do
begin//
Close;
SQl.clear;
Sql.Add('Select * from Categories where ParentCategoryId='+AQRy1.FieldbyName('CategoryId').asstring);
open;
if recordcount<>0 then DispTree(fieldbyName('ParentCategoryId').asinteger,Tvw.Selected);
end;//
Aqry1.Next;
end;////
end;
end;
调用ispTree(-1000,Tvw.items[0]) -1000 为顶层目录接点(软件)的ParentCategoryId,Tvw.items[0]表示为('商品')的节点!
我想用数据表Categor(ParentCategoryId,CategoryId,CategoryDesc)和Treeview控件来实现商品目录树!请问实现该目标的最佳途径是用何种方法来实现(即生成树的效率最高!)
下面是我写的一个递归算法!它没有实现我的想法,请哪位大虾来搞定它!并且我在递归中用了二个SQL语句,是否会很影响效率,请协助我进行分析!
兄弟们,我实在是囊中羞涩,只能给本问题50分了!等我发财了,会多多回报你们的!
目标:
+--商品
+--软件
+--S001
| +--S00101
| | +--S0010101
| |--S00102
| +--S0010201
+--S002
|
+--S003
+--S00301
本人的递归算法的结果:
+--商品
+--软件
+--S001
| +--S00101
| | +--S0010101
| |--S00102
|
+--S002
|
+--S003
procedure TCategoryf.DispTree(CatId:integer;Nodex:TTreeNode);
Var MyNode:TTreeNode;
var i:integer;
begin
With AQry1 do
begin
Close;
SQL.clear;
Sql.Add('Select * from Categories where ParentCategoryId='+Inttostr(CatId));
open;
if Recordcount<>0 then Nodex.Selected:=true;
While Not Eof do
begin
tvw.Items.AddChildObject(Tvw.Selected,Fieldbyname('CategoryDesc').asstring);
next;
end;
First;
While not Eof do
begin////
With AQry2 do
begin//
Close;
SQl.clear;
Sql.Add('Select * from Categories where ParentCategoryId='+AQRy1.FieldbyName('CategoryId').asstring);
open;
if recordcount<>0 then DispTree(fieldbyName('ParentCategoryId').asinteger,Tvw.Selected);
end;//
Aqry1.Next;
end;////
end;
end;
调用ispTree(-1000,Tvw.items[0]) -1000 为顶层目录接点(软件)的ParentCategoryId,Tvw.items[0]表示为('商品')的节点!