关于动态生成树的问题...请高手帮忙..在线等.. ( 积分: 50 )

  • 主题发起人 主题发起人 Jj1985
  • 开始时间 开始时间
J

Jj1985

Unregistered / Unconfirmed
GUEST, unregistred user!
有一数据库..
id name parentid
树的根节点为 parentid等于0的name值..记下它的id.
接着在查询parentid等于id的记录....如此递归下去..生成一颗完整的数..

我原以为这样可以用.:
node:=tree.items.addchild(.....)来生成..
但是我发现我不能确定这个树有多少层..从而不知道定义多少个TTreeNode.
故方法不行..
哪位高手能帮帮忙..!
 
你可以定义为
NewNode:Array of TTreeNode;
setlength(NewNode, 级别+1);//最高3级就设置为4个变量即可;
 
先感谢兄弟..

你的方法我考虑过..可是我现在就是不知道它有多少级..级别不清楚..
 
所有将所有的ParentID为0的结点全部找出来添加到树中作为0级结点,并设置它的Data为ID.
再树结点进行循环,将记录的ParentID为结点Data的记录作为树结点的子结点.
这种方法能实现,但是要循环多次;
 
其实这只是定义的方法;
最主要的是实现树的方法;其实只用两个变量就足够了;
不用变量用控件也行;
 
xxj0828
我就是不知道我要循环多少次.

清新空气.
你能不能简单的写段代码上来..
 
写好了!
 
//table2(ID Primary Key, Name, ParentID)
//界面上有一TTreeView, ADOConnection, 两个ADOQuery
procedure TForm1.btn1Click(Sender: TObject);
var
s1, s2: string;
FNode: TTreeNode;
function MyFindTNode(PID: Integer): TTreeNode;
var
i: Integer;
begin
Result := nil;
for i := 0 to tv1.Items.Count - 1 do
begin
if tv1.Items.Data = nil then Continue;
if Integer(tv1.Items.Data) = PID then
Result := tv1.Items;
if Result <> nil then Break;
end;
end;
begin
tv1.Items.Clear;

s1 := 'Select * From table2 where ParentID = 0';
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(s1);
qry1.Open;
qry1.First;
while not qry1.Eof do
begin
tv1.Items.AddChildObject(nil, qry1.FieldByName('Name').AsString,
Pointer(qry1.FieldByName('ID').AsInteger));
qry1.Next;
end;
s2 := 'Select * From table2 where ParentID <> 0';
qry2.Close;
qry2.SQL.Clear;
qry2.SQL.Add(s2);
qry2.Open;
qry2.First;
while not qry2.Eof do
begin
FNode := MyFindTNode(qry2.FieldByName('ParentID').AsInteger);
if FNode <> nil then
tv1.Items.AddChildObject(FNode, qry2.FieldByName('Name').AsString,
Pointer(qry2.FieldByName('ID').AsInteger));
qry2.Next;
end;
end;
 
写这么长呀?加载速度如何?
 
为什么你会关心这个树有多少层,递归的时候动态产生Treenode不行吗,不过用这个方法速度不是很快,如果你的节点数在1万以内,速度还是可以接受的。
 
个十万的数据最快可以在2秒左右,我记得好象我测试是1.8秒;
就是别用递归
 
这个要采用动态的递归函数。
 
只加载2层节点,点击2层节点时再查询数据库生成下一层。
 
我做过的一个,对层数无限制,带图标效果,但效率也不是很高,改进后效果会好一些
不使用第三方控件,算法为:一次性加载,广度优先的层展算法
 
低价提供计算机专业视频教程,所有教程由业内名家讲解,
物超所值,保证所有视频高清晰,特快专递三天内到.
联系方式:手机:13576145612(手机联系佳) QQ:108410943
E-mail:ncncldjjg@126.com
1、Oracle9iOCP(Oracle认证专家DBA)视频教程(23CD)
2、SQL语言、数据挖掘、SQLServer2000视频教程(6CD)
3、计算机网络原理视频教程(4CD)
4、计算机实用组网技术视频教程(3CD)
5、MCSE(微软认证系统工程师)认证视频教程(11CD)
6、windows2003即学即会视频教程(6CD)
7、J2EE Web程序开发定向班/Java就业班视频教程
(java基础jsp核心技术UML设计)(13CD)
8、赛迪网校J2EE基础高级案例分析视频教程(9CD)
9、马士兵J2SE入门与精通(含坦克大战、BBS实例)视频教程(6CD)
10、孙鑫java语言深入详解视频教程(12CD)
11、张效详java技术从入门到精通视频教程(21CD)
12、张效详javascript全接触视频教程(13CD)
13、code365网站源程序(9CD)
14、unix原理视频教程(3CD)
15、Linux软件开发工程师(C语言)视频教程(4CD)
16、Linux配置、管理、优化实战工程师视频教程(8CD)
17、Linux内核编程视频教程(11CD)
18、C语言详解视频教程(2CD)
19、孙鑫VC++6.0开发技术术详解视频教程(6CD)
20、ASP.NET中文视频教程(3CD)
21、洪恩C#入门多媒体教程(1CD)
22、XML技术视频教程(2CD)
23、吉大操作系统视频教程(3CD)
24、吉大网络技术基础视频教程(2CD)
25、吉大数据结构视频教程(5CD)
26、清华大学计算机专业多媒体教程(数据结构、汇编、编译原理等)(13CD)
27、大学数学[离散数学线性代数概率与数理统计微积分]视频教程(22CD)
28、LearnKey Asp.Net (老外用英语讲课)(13CD)
29、LearnKey Asp.Net Webservice(老外用英语讲课)(5CD)
30、AppDev Asp.Net2.0 UsingC# (老外用英语讲课)(1CD)
31、APPDev .Net Framework(老外用英语讲课)(2CD)
32、林清安pro/e2001(野火版)视频教程(18CD)
33、深圳大学3D设计视频教程(4CD)
34、3DMAX建模视频教程(老外用英语讲课)(6CD)
35、3DMAX纹理与贴图材质灯光视频教程(老外用英语讲课)(5CD)
36、3DMAX格式500个常用模型库(4CD)
37、lightscape基础入门视频教程(2CD)
38、聚光制造(lightscape3.2入门与精通视频教程)(4CD)
39、coreldraw12中文版入门与精通swf格式视频教程(2CD)
 
后退
顶部