- 浏览: 59967 次
- 性别:
- 来自: 杭州
最新评论
根据数据表的内容生成TreeView树状结构,通常的做法就是从顶级开始,然后逐项递归查询遍历生成。
这种方法在实现上容易做到,也很容易想到,但是效率比较低,因为数据库的检索(SQL语句需要解释执行,
而且是对数据库文件进行操作)还是比较耗时的,尤其是树的层次较多,节点较多的情况。这里我要介绍的
方法是以空间换取时间,只进行一次数据库检索,提取出全部数据,然后一次生成TreeView树状结构。
通过SQL语句,让返回的记录按照父节点ID、节点ID进行排序,这样保证每次当前要添加的节点记录的
父节点都已经添加到了TreeView树中,剩下的工作就是如何在TreeView树中找到父节点。这里我采用了
一个排序的TStringList列表,通过排序列表采用二分查找的快速性能,就能够很快地查找到当前要添加
节点的父节点,从而插入到TreeView树的正确位置。(测试通过!!!!!!!!!!!!!)
源代码如下(假定数据表名称为FTree,字段有ID, ParentID, Name):(ParentID包含于ID)
procedure MakeTree(Query: TQuery; TreeView: TTreeView);
var
List: TStringList;
Node: TTreeNode;
Index: Integer;
begin
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
while not Query.Eof do
begin
if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
Node := TreeView.Items.AddChild(nil, Query.FieldByName('Name').AsString)
else
begin
Index := List.IndexOf(Query.FieldByName('ParentID').AsString);
Node := TreeView.Items.AddChild(TTreeNode(List.Objects[Index]),
Query.FieldByName('Name').AsString);
end;
List.AddObject(Query.FieldByName('ID').AsString, Node);
Query.Next;
end;
finally
List.Free;
end;
finally
TreeView.Items.EndUpdate;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
T: DWORD;
begin
T := GetTickCount;
Query1.SQL.Text := 'SELECT * FROM FTree ORDER BY ParentID, ID';
Query1.Open;
MakeTree(Query1, TreeView1);
Label1.Caption := Format('MakeTree所用时间: %d ms', [GetTickCount - T]);
TreeView1.items[2].selected := true;
end;
发表评论
-
脚本是在
2009-03-11 19:00 1092大家交 ... -
DELPHI常见事件、常用方法、属性使用范围说明
2008-06-19 22:24 2850属性使用范围说明 Action 一些组件标识与组件相连接的 ... -
DELPHI常见属性说明
2008-06-19 21:37 1561DELPHI常见属性说明: ALI ... -
Delphi中的时间操作技术
2008-06-19 13:45 2713在编写应用程序时,我 ... -
delphi用于时间操作的函数 (2)
2008-06-19 13:44 1731TDateTime类型与字符串型转换函数: DateTime ... -
delphi用于时间操作的函数(1)
2008-06-19 13:43 1369用于时间操作的函数 Date函数: 定义:Date: TDa ... -
Delphi中根据分类数据生成树形结构的最优方法
2008-06-18 21:52 3446新一篇: Delphi程序设计之--惯用法 一、 引言: ... -
我的DBTreeView--TreeView直接连接数据表
2008-06-04 17:34 1075unit Unit1; interface uses ... -
Delphi下Treeview控件基于节点编号的访问
2008-06-04 17:31 1504有时我们需要保存和重建treeview控件,本文提供一种方法, ... -
Delphi中根据分类数据生成树形结构的最优方法
2008-06-04 17:27 1325很多系统都有类似于如下的表结构(table1): ID ... -
TreeView添加子节点和动态生成控件
2008-06-04 14:06 3933有这样一个TreeView,动态分有类A,B,C...(不一定 ... -
一种较简易的树型控件节点构造法
2008-06-03 21:42 1010把数据库中的数据在树型控件(TreeView)中正确显示是较为 ... -
Delphi中树型控件的使用技巧
2008-06-03 13:40 1417我们都知道,开发者 ... -
TREEVIEW右键菜单示例
2008-06-03 13:31 3623在 Form1 上拖一个 TreeView 控件,然后参考一下 ... -
TreeView的使用
2008-06-03 13:09 1341TreeView 是一个显示树型结构的控件,每一个节点都是一个 ... -
在Dephi中使用TStream读写数据的技巧
2008-06-02 13:29 820在Dephi中提供了一个抽 ... -
Delphi环境下灵活的数据库树表实现
2008-06-02 13:27 12621 数据结构设计 在 ...
相关推荐
Delphi树形菜单类以及例子,结合数据库生成Treeview树控菜单视图,你可了解下如何按照节点在数据库中的编号查找节点、如何查找节点在数据库中的数据、填充节点等。这个类通过数据库中的数据自动添加到Treeview控件中...
本主题将深入探讨如何基于数据库动态生成一个树形视图,特别是针对单表数据来构建部门组织结构。 首先,理解基本概念。`TreeView`是.NET Framework中的一个控件,它允许用户以树形结构展示数据。每个节点可以有子...
在这个例子中,使用了两个数据库表:`big`和`class`,通过`DataView`处理SQL查询结果,然后直接在`TreeView`中添加节点。在`Form2_Load`事件处理程序中,首先创建一个新的`TreeNode`作为根节点,然后遍历查询结果,...
根据提供的标题、描述、标签及部分内容,我们可以详细探讨如何利用C#与ASP.NET技术实现TreeView控件从数据库中动态生成树形结构。 ### 一、背景介绍 在Web开发中,TreeView 控件是一种非常有用的工具,它可以帮助...
1. **构建树形结构**:分析数据库表结构,确定哪些字段适合作为节点。通常,父节点代表更高层次的分类,子节点表示更具体的项。 2. **生成TreeNode对象**:根据数据库查询结果,创建TreeNode对象并添加到TreeView的...
本篇文章将深入探讨如何利用C#编程语言,从数据库中读取数据,并动态地生成`TreeView`的节点。 首先,我们需要了解`TreeView`的基本操作。在C#中,`TreeView`控件提供了一组丰富的API,允许我们添加、删除和修改...
本项目似乎涉及到一个使用Delphi编程语言开发的应用,其目标是根据特定的数据库表(包含3个字段)生成一个TreeView控件,以展示层级关系。以下是关于这个主题的详细知识: 1. **TreeView控件**:TreeView控件在...
通过以上步骤,我们可以构建一个能够根据数据库表动态生成和编辑TreeView的C#应用程序。这个过程涉及到了数据库操作、数据绑定、事件处理等多个关键知识点,体现了C#作为面向对象语言的强大功能。
根据提供的文件信息,本文将详细解析C#与ASP.NET中如何利用Treeview控件结合数据库动态生成树形结构。此技术在很多应用中都极为常见,例如管理后台、权限分配等场景。 ### 一、Treeview控件简介 在ASP.NET中,...
本篇将深入探讨如何利用C#和`TreeView`控件从数据库中读取数据并生成树形结构。 首先,我们需要理解`TreeView`控件的基本用法。`TreeView`控件由多个`TreeNode`对象组成,每个`TreeNode`代表树的一个节点,可以包含...
VC 读取数据库生成TreeView树形菜单,全国城市菜单数据存储在全国.mdb数据库中,连接好数据库,程序将自动加载数据库中的内容,并生成TreeView数控菜单功能,用户可展开相应的菜单项,查看省份下的具体城市。
在ASP.NET中,生成一个基于SQL Server 2005数据库表结构的TreeView控件是一项常见的任务,这对于数据浏览和管理界面特别有用。这个过程涉及多个步骤,包括连接数据库、查询表信息、构建TreeNode对象以及将这些节点...
在这个"ASP.NET-Treeview-递归生成部门树"的示例中,我们将探讨如何利用TreeView控件结合递归算法来构建一个表示部门结构的树形视图。 首先,我们要理解TreeView的基本概念。TreeView控件是一个可视化组件,它能够...
总结来说,通过数据库数据动态生成`TreeView`,主要步骤包括:连接数据库、查询数据、解析数据并构建树形结构、处理用户交互。这个过程需要理解数据库层次数据的表示方式,以及如何利用C#的面向对象特性实现递归构建...
当页面加载时,TreeView将根据数据源控件的查询结果生成对应的树形结构。 注意,为了提供更好的用户体验,可以考虑使用异步加载(Asynchronous Binding)和分页(Paging)功能,特别是在处理大量数据时。另外,...
本教程将详细讲解如何利用`TreeView`控件动态添加、修改和删除节点,并将这些操作即时保存到数据库,以便在下次运行程序时能够恢复用户所做的更改。 ### 一、`TreeView`控件基础 `TreeView`控件在Windows Forms或...
这个压缩包“asp.net 利用TreeView控件动态生成无限级树.rar”主要关注如何利用TreeView控件来构建一个能够无限扩展的层级结构。下面将详细阐述相关知识点。 1. TreeView控件简介: TreeView是ASP.NET Web Forms中...
在本场景中,我们关注的是如何根据数据库中的数据动态生成一个包含三层结构的TreeView控件。TreeView控件是Windows Forms中一个常用组件,它能够以树状结构展示数据,便于用户浏览和操作。 首先,我们需要理解“三...
3. **数据绑定**:在本例中,Treeview的节点可能与数据库表或查询的结果集绑定,这样,当查询结果发生变化时,Treeview会自动更新。这通常通过数据感知机制(Data Binding)实现,通过设置TTreeNode的对象属性,如...
### TreeView控件动态生成无限级树:深入解析与实现 在现代的Web应用程序开发中,数据展示方式的多样化和高效性是提升用户体验的关键因素之一。其中,`TreeView`控件因其直观、层次清晰的特点,被广泛应用于表示...