delphi中父母表示法递归构造treeview(在递归函数之外查询数据库)

原创 2006年05月17日 09:16:00

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ComCtrls, StdCtrls;
type
  PTNodeInfo=^TNodeInfo;
  TNodeInfo=record
  id,preId:string;
  end;
type
  TArr=array of TNodeInfo;
type
  TForm1 = class(TForm)
    Button1: TButton;
    tree: TTreeView;
    Query1: TADOQuery;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure CreateTree(var arr:TArr);
    procedure InitArray(var arr:TArr);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.InitArray(var arr:TArr);
var

  Query:TADOQuery;
  i:integer;
  sql:string;
begin
  Query:=TADOQuery.Create(nil);
  Query.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/实验/递归父母表示/新建 Microsoft Office Access 应用程序.mdb;Persist Security Info=False';
  sql:= 'select * from table1';
  Query.Close;
  Query.SQL.Clear;
  Query.SQL.Add(sql);
  Query.Open;
  Query.First;
  SetLength(arr,Query.RecordCount);
  i:=0;
  while not Query.Eof do
  begin
    arr[i].id:=Query.fields[0].AsString;
    arr[i].preId:=Query.Fields[1].AsString;
    Inc(i);
    Query.Next;
  end;

end;

procedure TForm1.CreateTree(var arr:TArr);
var
  p:pTNodeInfo;
  procedure CreateTree(Pre:PTNodeInfo;preNode:TTreeNode;var arr:TArr);
  var
    pInfo:pTNodeInfo;
    node:TTreeNode;
    i:integer;
  begin
    i:=length(arr)-1;
    while i>=0 do
    begin
      new(pInfo);
      pInfo:=@arr[i];
      if pInfo.preId=pre.id then
      begin
        node:=tree.Items.AddChild(preNode,pInfo.id);
        node.Data:=pInfo;
        CreateTree(pInfo,node,arr);
      end;
    i:=i-1;
    end;
  end;
begin
  new(p);
  p.id:='000';
  createTree(p,nil,arr);
  tree.FullExpand;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
arr:TArr;
i:Integer;
begin
  InitArray(arr);
  CreateTree(arr);
  memo1.Clear;
  for i:=0 to tree.Items.Count-1 do
  memo1.Lines.Add(ptnodeinfo(tree.Items[i].data).Id+'  '+ptnodeinfo(tree.Items[i].data).preId);

end;

end.                               

如何实现具有层次结构的 TreeView 模版使用

数据模板 (DataTemplate) 和数据绑定 (Data Binding) 为了把数据和界面进行关联,我们要做 3 件事: 1、在 MainWindow.xaml 中添加一个 Tre...
  • AAA123524457
  • AAA123524457
  • 2015年06月25日 14:38
  • 1353

delphi中Treeview的使用介绍

今天重点学习了TreeView的使用方法,基本的已经写了,现在主要想说的是如何显示数据库的资料,今天只是做了个较简单的例子,一个父节点下显示数据库中某个field的值。代码如下:    proc...
  • chinajobs
  • chinajobs
  • 2016年05月18日 11:06
  • 1189

C# TreeView 建立、遍历树(递归)

C#gui程序中建立树状结构、遍历树状结构、树状结构节点选中联动(选中父节点时,自动选中其全部子节点,取消选中的某子节点,取消其相应的所有父节点的选中),读取选中节点信息。...
  • heivy
  • heivy
  • 2016年12月07日 15:59
  • 4072

TreeView实现主菜单功能

TreeView实现主菜单功能     软件在菜单MenuItem中,设置了软件的各项功能,以及启动相应模块。为了加大软件的灵活性,我们还可以将主菜单的项目,转变为TreeView,通过点击Tre...
  • lyhoo163
  • lyhoo163
  • 2015年01月03日 14:25
  • 2754

递归的遍历TreeView中的所有结点

有时候需要访问TreeView中的所有结点,在所有结点中查找相关信息。 下面给出递归的遍历所有结点的代码,以及TreeView的构建代码 using System; using S...
  • weixingstudio
  • weixingstudio
  • 2013年03月11日 19:26
  • 2543

根据数据库结构生成TreeView

现在大多数的方法是采用递归,但这种操作会频繁的去select数据库,降低了执行效率,稍微改动一些,效果会好不少,这里介绍一种方法,即一次性select出所有数据,然后按照ParentID排序,逐条添加...
  • u010359641
  • u010359641
  • 2014年09月17日 13:12
  • 794

treeview节点拖动

网上找的有一个BUG,就是父节点为空时会出错,已经修正 把treeview改名为tvList,并把AllowDrop设置为True,然后添加以下代码: private void tvList_Drag...
  • rztyfx
  • rztyfx
  • 2015年06月21日 22:11
  • 1112

PB实现TreeView多级分类检索(案例)

contructor事件:long ll_row,i TreeViewItem tv_new //建立一个图标队列,供其中的TreeViewItem项引用,在这里建立主要是为了能够控制图标大小 //首...
  • tlammon
  • tlammon
  • 2016年03月25日 01:12
  • 931

Delphi中树型控件的使用技巧

我们都知道,开发者主要用Delphi来开发数据库管理软件,正因如此,树型控件的使用最好与数据库联系起来。Delphi提供了一个树型控件TTreeView,可以用来描述复杂的层次关系。   树...
  • chengs_
  • chengs_
  • 2014年05月22日 09:17
  • 2250

C#递归所以部门展示到TreeView

C#递归所以部门展示到TreeView
  • whl632359961
  • whl632359961
  • 2016年08月15日 17:38
  • 352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi中父母表示法递归构造treeview(在递归函数之外查询数据库)
举报原因:
原因补充:

(最多只允许输入30个字)