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

数据库表TreeView树的快速生成

阅读更多

根据数据表的内容生成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;

分享到:
评论

相关推荐

    Delphi结合数据库生成Treeview树控菜单视图类.rar

    Delphi树形菜单类以及例子,结合数据库生成Treeview树控菜单视图,你可了解下如何按照节点在数据库中的编号查找节点、如何查找节点在数据库中的数据、填充节点等。这个类通过数据库中的数据自动添加到Treeview控件中...

    TreeView 基于数据库动态生成树

    本主题将深入探讨如何基于数据库动态生成一个树形视图,特别是针对单表数据来构建部门组织结构。 首先,理解基本概念。`TreeView`是.NET Framework中的一个控件,它允许用户以树形结构展示数据。每个节点可以有子...

    数据库表生成TreeView

    在这个例子中,使用了两个数据库表:`big`和`class`,通过`DataView`处理SQL查询结果,然后直接在`TreeView`中添加节点。在`Form2_Load`事件处理程序中,首先创建一个新的`TreeNode`作为根节点,然后遍历查询结果,...

    c#语言asp.net实现treeview控件读数据库动态生成树

    根据提供的标题、描述、标签及部分内容,我们可以详细探讨如何利用C#与ASP.NET技术实现TreeView控件从数据库中动态生成树形结构。 ### 一、背景介绍 在Web开发中,TreeView 控件是一种非常有用的工具,它可以帮助...

    C# WinForm DataGridView同步更新数据库 TreeView最简单的绑定数据库

    1. **构建树形结构**:分析数据库表结构,确定哪些字段适合作为节点。通常,父节点代表更高层次的分类,子节点表示更具体的项。 2. **生成TreeNode对象**:根据数据库查询结果,创建TreeNode对象并添加到TreeView的...

    读取数据库 动态生成树节点

    本篇文章将深入探讨如何利用C#编程语言,从数据库中读取数据,并动态地生成`TreeView`的节点。 首先,我们需要了解`TreeView`的基本操作。在C#中,`TreeView`控件提供了一组丰富的API,允许我们添加、删除和修改...

    由特定数据库表格式(3个字段)生成TreeView树型

    本项目似乎涉及到一个使用Delphi编程语言开发的应用,其目标是根据特定的数据库表(包含3个字段)生成一个TreeView控件,以展示层级关系。以下是关于这个主题的详细知识: 1. **TreeView控件**:TreeView控件在...

    C# 根据数据库表建立TreeView

    通过以上步骤,我们可以构建一个能够根据数据库表动态生成和编辑TreeView的C#应用程序。这个过程涉及到了数据库操作、数据绑定、事件处理等多个关键知识点,体现了C#作为面向对象语言的强大功能。

    c#语言asp.net实现treeview控件读数据库动态生成树的代码

    根据提供的文件信息,本文将详细解析C#与ASP.NET中如何利用Treeview控件结合数据库动态生成树形结构。此技术在很多应用中都极为常见,例如管理后台、权限分配等场景。 ### 一、Treeview控件简介 在ASP.NET中,...

    C#利用 treeview生成树

    本篇将深入探讨如何利用C#和`TreeView`控件从数据库中读取数据并生成树形结构。 首先,我们需要理解`TreeView`控件的基本用法。`TreeView`控件由多个`TreeNode`对象组成,每个`TreeNode`代表树的一个节点,可以包含...

    VC 读取数据库生成全国城市TreeView菜单.rar

    VC 读取数据库生成TreeView树形菜单,全国城市菜单数据存储在全国.mdb数据库中,连接好数据库,程序将自动加载数据库中的内容,并生成TreeView数控菜单功能,用户可展开相应的菜单项,查看省份下的具体城市。

    asp.net遍历SQL2005数据库中的表生成treeview

    在ASP.NET中,生成一个基于SQL Server 2005数据库表结构的TreeView控件是一项常见的任务,这对于数据浏览和管理界面特别有用。这个过程涉及多个步骤,包括连接数据库、查询表信息、构建TreeNode对象以及将这些节点...

    ASP.NET-Treeview-递归生成部门树

    在这个"ASP.NET-Treeview-递归生成部门树"的示例中,我们将探讨如何利用TreeView控件结合递归算法来构建一个表示部门结构的树形视图。 首先,我们要理解TreeView的基本概念。TreeView控件是一个可视化组件,它能够...

    由数据库数据动态生成TREEVIEW(含源代码)

    总结来说,通过数据库数据动态生成`TreeView`,主要步骤包括:连接数据库、查询数据、解析数据并构建树形结构、处理用户交互。这个过程需要理解数据库层次数据的表示方式,以及如何利用C#的面向对象特性实现递归构建...

    asp.net treeview 绑定数据库

    当页面加载时,TreeView将根据数据源控件的查询结果生成对应的树形结构。 注意,为了提供更好的用户体验,可以考虑使用异步加载(Asynchronous Binding)和分页(Paging)功能,特别是在处理大量数据时。另外,...

    treeview动态添加节点内容 立刻保存至数据库

    本教程将详细讲解如何利用`TreeView`控件动态添加、修改和删除节点,并将这些操作即时保存到数据库,以便在下次运行程序时能够恢复用户所做的更改。 ### 一、`TreeView`控件基础 `TreeView`控件在Windows Forms或...

    asp.net 利用TreeView控件动态生成无限级树.rar

    这个压缩包“asp.net 利用TreeView控件动态生成无限级树.rar”主要关注如何利用TreeView控件来构建一个能够无限扩展的层级结构。下面将详细阐述相关知识点。 1. TreeView控件简介: TreeView是ASP.NET Web Forms中...

    c# 根据数据库动态生成三层treeview导航

    在本场景中,我们关注的是如何根据数据库中的数据动态生成一个包含三层结构的TreeView控件。TreeView控件是Windows Forms中一个常用组件,它能够以树状结构展示数据,便于用户浏览和操作。 首先,我们需要理解“三...

    Treeview树控操作DelphiAccess数据库源码.rar

    3. **数据绑定**:在本例中,Treeview的节点可能与数据库表或查询的结果集绑定,这样,当查询结果发生变化时,Treeview会自动更新。这通常通过数据感知机制(Data Binding)实现,通过设置TTreeNode的对象属性,如...

    TreeView控件动态生成无限级树

    ### TreeView控件动态生成无限级树:深入解析与实现 在现代的Web应用程序开发中,数据展示方式的多样化和高效性是提升用户体验的关键因素之一。其中,`TreeView`控件因其直观、层次清晰的特点,被广泛应用于表示...

Global site tag (gtag.js) - Google Analytics