`
ivfh
  • 浏览: 59968 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Delphi中根据分类数据生成树形结构的最优方法

阅读更多

很多系统都有类似于如下的表结构(table1):

ID                 Name                         ParentID

---------------------------------------------------------

001              电子类                              0

002              金属类                              0

003              电容电子                         001

004              电阻电子                         001

005              有色金属                         002

而且大家都习惯于用树(TreeView)来显示,这样就可以很好的显示整个表的分类情况。但如果数据量多时会造成树的生成比较慢,特别是用递归来实现时要访问数据库的次数很多(根据层数),用在三层中效果更加显。在此提供一个好的方法来生成树形结构。

这个算法只访问一次数据库,具体的实现如下:

1、一次性从数据库中取出所有的数据,并按照ParentID字段进行排序,这样就保证每一条数据的父节点都在它的前面。

2、取出第一条数据画到树中,在添加到树中时先找到这条数据的父节点,如果没有 则将此记录直接作为树的第一级节点

3、如果还有数据,则取出来执行第2步,直到没有数据为止。

程序实现:

   本程序将用一个stlID的TStringList变量来存放对应树中每一个节点的ID值,用FindParent函数来父节点。

function FindParent(ID:String):TTreeNode;

var

  i:Integer;

begin

  result:=nil;

  for i:=TreeView1.Items.Count-1 downto 0 do

    if stlID.Strings[i]=ID then

    begin

      result:=TreeView1.Items[i];

      break;

    end;

end;

//生成树

procedure CreateTree;

var

  tmpNode:TTreeNode;

begin

  Query1.close;

  Query1.SQL.Text:='select * from table1 order by ParentID';

  Query1.Open;

  Query1.First;

  while not Query1.Eof do

  begin

    tmpNode:=TreeView1.Items.AddChild(FindParent(Query1.FieldByName('ParentID').AsString),Query1.FieldByName('Name').AsString);

    stlID.Add(Query1.FieldByName('ID').AsString);//记录ID

    Query1.Next;

  end;

end;

分享到:
评论

相关推荐

    Delphi中根据分类数据生成树形结构的方法

    在本文中,我们将深入探讨如何在Delphi中根据分类数据生成树形结构,特别是利用TreeView组件来实现这一目标。这在数据库应用、文件系统显示、组织结构展示等方面都有广泛应用。 首先,我们要理解Delphi中的TreeView...

    自动生成树形结构

    在IT领域,尤其是在软件开发中,树形结构是一种常见的数据表示方式,特别是在处理层次关系时。"自动生成树形结构"这一技术主要应用于构建可视化界面,例如文件系统、组织架构或者数据库表之间的关系展示。本篇文章将...

    Delphi中快速实现数据库树形结构并实现Treeview导航表数据.rar

    "Delphi中快速实现数据库树形结构并实现Treeview导航表数据"是一个实用的技术主题,它涉及如何将数据库中的层级关系数据映射到图形化的Treeview组件上,使用户能够通过树形结构来浏览和操作数据。下面我们将深入探讨...

    Delphi中快速实现数据库树形结构并实现Treeview导航表数据

    在Delphi编程环境中,开发人员经常需要将数据库中的数据以树形结构展示,这有助于用户直观地理解层次关系。在本教程中,我们将探讨如何快速地在Delphi中实现这样的功能,利用TreeView组件来导航数据库表的数据。我们...

    Delphi DBTree读取数据库生成树形菜单.rar

    Delphi基于DBTree方法生成树形菜单,菜单数据来自数据库。本树形菜单控件的数据库使用了Access,每次从数据库读取数据后,自动生成节点,节点自动编号,可一次删除节点成母节点,在一些大型的软件系统中,树形菜单的...

    delphi 树型控件自动根据数据集生成树型结构

    本文将详细讲解如何在 Delphi7 中使用树型控件,并自动根据数据集生成树型结构。 首先,理解 TTreeView 控件的基本操作。TTreeView 提供了一个可视化的组件,用于展示具有父节点和子节点的关系的数据。每个节点表示...

    无限库树形结构生成

    在Delphi中,我们可以使用TTreeview控件来创建基本的树形结构,但要实现无限级别的树形结构,通常需要自定义逻辑和递归算法。无限树形结构意味着节点可以有任意数量的子节点,且这些子节点也可以继续扩展出更多的子...

    DELPHI实现数据库目录树生成

    1. **TTreeView** 控件:Delphi提供的TTreeView控件是构建目录树视图的基本组件,它可以显示树形结构的数据,支持添加、删除、展开和折叠节点等操作。 2. **数据库访问组件**:如DBExpress、ADO等,用于连接和查询...

    delphi树形结构源码

    在Delphi中,"树形结构"通常指的是控件TTreeView,它是用户界面中的一个重要元素,用于展示层次化的数据。这种数据结构在很多场景下都非常实用,比如文件系统浏览、组织结构展示等。 在描述中提到的"delphi树形结构...

    Cxgrid做树形

    2. **创建数据源**:树形结构的数据通常包含父节点和子节点,因此你需要一个支持层级数据的数据源。这可以是自定义的类结构,或者是数据库中的表,通过关系字段表示父子关系。例如,你可以使用`DataSet`或`DataTable...

    《Delphi算法与数据结构》全书的源代码

    在《Delphi算法与数据结构》中,你将找到各种类型的算法实现,如排序算法(快速排序、冒泡排序、插入排序等)、搜索算法(二分查找、广度优先搜索、深度优先搜索等)以及图论中的算法(最短路径算法、最小生成树等)...

    delphi树形结构地域管理

    1. **TTreeView组件**:Delphi中用于显示树形结构的主要控件是TTreeView。我们可以使用TTreeView来创建和维护一个节点层次结构,每个节点代表一个地域,如国家、省份、城市等。 2. **数据绑定**:为了将地域数据与...

    delphi生成最小生成树

    delphi比啊摹写生成最小生成树,给出点 就可以生成最小胜创术

    delphi文件XML生成树

    本篇文章将深入探讨如何在Delphi中实现XML树的生成。 首先,我们需要了解Delphi中处理XML的主要组件——TXMLDocument。TXMLDocument是Indy库中的一个组件,它可以用来创建、加载和保存XML文档。在设计阶段,将...

    Delphi使用递归算法读取数据库生成树形菜单.rar

    Delphi使用递归算法读取数据库生成树形菜单,Delphi创建一个动态的树叉菜单,菜单内容基于递归法从数据库读取而来,请参考数据库显示,看数据库内的内容,这里仅仅给了附表和数据库中的数据创建树的示例,至于向...

    Delphi 从数据库生成目录树

    在 Delphi 开发环境中,构建一个能够从数据库中动态生成目录树的应用程序是一项常见的任务,尤其是在数据管理和文件系统操作相关的项目中。这个标题"Delphi 从数据库生成目录树"暗示我们将利用 Delphi 的组件和...

    delphi的二维码生成实例

    以下是一个简化的步骤,展示了如何在Delphi中使用ZXing库生成二维码: 1. **引入ZXing库**:首先,你需要下载ZXing.Delphi库,这是一个为Delphi编译器优化的版本。将库的源代码导入到你的项目中,确保所有依赖项都...

    Delphi中从Excel导入数据的通用方法

    总之,Delphi中从Excel导入数据的通用方法主要依赖于第三方组件,如JvExcel。通过这些组件,我们可以方便地访问Excel文件中的数据,并将其集成到Delphi应用程序中。当然,还有其他库和方法,如使用Microsoft的OLE ...

    delphi 数据结构与算法

    在Delphi中,这些数据结构可以通过内置的TArray、TList、TStack、TQueue等类进行实现,也可以自定义结构体或类来构建更复杂的数据结构。例如,数组提供了固定大小的连续内存空间,适合快速访问;链表则通过节点间的...

    delphi算法与数据结构源码

    在Delphi中,数据结构包括数组、链表、栈、队列、树(如二叉树、AVL树、红黑树等)、图等。这些数据结构的选择和实现方式直接影响到程序的性能和可维护性。例如: 1. **数组**:是最基本的数据结构,提供了固定大小...

Global site tag (gtag.js) - Google Analytics