数据库结构:
字段 类型
ID 整型 索引(无重复)
name 文本
father 整型

//tree初始化
procedure TForm1.FormActivate(Sender: TObject);
var i:integer;
begin
treeview1.Items.BeginUpdate;
while not(adotable1.Eof) do
begin
if ADOTable1.FieldValues[father]=0 then
treeview1.Items.addchild(treeview1.DropTarget,ADOTable1.FieldValues[name])
else
begin
i:=0;
repeat
if treeview1.Items.Item[i].Text = ADOTable1.Lookup(ID,ADOTable1.FieldValues[father],name) then
begin
treeview1.Items.AddChild(treeview1.Items.Item[i],ADOTable1.FieldValues[name]);
break;
end;
i:=i+1;
until i>adotable1.RecordCount;
end;
ADOTable1.next;
end;
treeview1.Items.EndUpdate;
end;

//tree添加
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
adotable1.Last;
i:=adotable1.FieldValues[ID];
if checkbox1.Checked=false then
begin
adotable1.InsertRecord([edit1.Text,adotable1.Lookup(name,treeview1.Selected.Text,ID),i+1]);
treeview1.Items.AddChild(treeview1.Selected,edit1.Text);
end
else
begin
adotable1.InsertRecord([edit1.Text,0,i+1]);
treeview1.Items.AddChild(treeview1.DropTarget,edit1.Text);
end;
end;

//tree删除
procedure TForm1.Button3Click(Sender: TObject);
begin
if treeview1.Selected.HasChildren then
begin
showmessage(含有子项,不能删除.);
abort;
end;
begin
adotable1.Locate(name,treeview1.Selected.Text,[loPartialKey]);
adotable1.Delete;
treeview1.Items.Delete(treeview1.Selected);
end;
end;

//tree图标
procedure TForm1.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
begin
if Node.Expanded then
Node.ImageIndex := 1
else
Node.ImageIndex := 0
end;

//tree图标
procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;Node: TTreeNode);
begin
node.SelectedIndex:=node.ImageIndex;
end;

//list初始化
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
var p:pointer;
begin
listview1.Items.Clear;
if adotable2.Locate(class,adotable1.Lookup(name,treeview1.Selected.Text,ID),[loPartialKey])=true then
begin
p:=listview1.Items.Add;
listview1.Items.Item[listview1.Items.IndexOf(p)].Caption:=adotable2.FieldValues[name];
listview1.Items.Item[listview1.Items.IndexOf(p)].SubItems.Add(adotable2.FieldValues[url]);
end;
end;

//list添加
procedure TForm1.Button2Click(Sender: TObject);
var p:pointer;
begin
p:=listview1.Items.Add;
listview1.Items.Item[listview1.Items.IndexOf(p)].Caption:=edit2.Text;
listview1.Items.Item[listview1.Items.IndexOf(p)].SubItems.Add(edit3.Text);
adotable2.InsertRecord([adotable1.Lookup(name,treeview1.Selected.Text,ID),edit2.Text,edit3.Text]);
end;

//list删除
procedure TForm1.Button4Click(Sender: TObject);
begin
adotable2.Locate(name,listview1.Selected.Caption,[loPartialKey]);
adotable2.Delete;
listview1.Selected.Delete;
end;

用数据表创建树_delphi教程的更多相关文章

  1. ECSHOP数据表结构完整仔细说明教程

    From:http://www.ecshop119.com/ecshopjc-868.html s_account_log //用户账目日志表 字段 类型 Null 默认 注释 log_id medi ...

  2. ECSHOP数据表结构完整仔细说明教程 (http://www.ecshop119.com/ecshopjc-868.html)

    s_account_log //用户账目日志表 字段 类型 Null 默认 注释 log_id mediumint(8) 否   自增ID号 user_id mediumint(8) 否   用户登录 ...

  3. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  4. XamarinSQLite教程创建数据表

    XamarinSQLite教程创建数据表 新创建的数据库没有任何表.开发者需要手动添加数据表,并添加测试所需的数据. 1.创建数据表 为了存储数据,开发者需要添加自己的表,并设计表的结构.操作步骤如下 ...

  5. MySQL中表的复制以及大型数据表的备份教程

    MySQL中表的复制以及大型数据表的备份教程     这篇文章主要介绍了MySQL中表的复制以及大型数据表的备份教程,其中大表备份是采用添加触发器增量备份的方法,需要的朋友可以参考下 表复制 mysq ...

  6. WordPress插件制作教程(五): 创建新的数据表

    上一篇讲解了怎样将数据保存到数据库,今天为大家讲解创建新的数据表,也就是说当我们激活插件的时候,会在该数据库下面创建一个新的数据表出来.原理很简单,激活插件的时候运行创建数据库的代码.看下面代码: & ...

  7. Android实战简易教程-第二十五枪(基于Baas的数据表查询下拉刷新和上拉载入实现!)

    上一节我们实现了数据表的载入,可是,当数据表数据非常多时.我们就要考虑数据的分页.这里我们选用了PullToRefreshListView控件,先看一下该控件的说明: 效果图:            ...

  8. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. 改用C++生成自动化数据表

    改用C++生成自动化数据表 前面的文章中,我们讨论了使用一个基于.NET的第三方程序库来从程序中来生成数据表.在我看来,这整个思路是非常有用的,例如为显示测试结果.我经常会自己在博客中尝试各种像这样的 ...

随机推荐

  1. BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...

  2. SpringMVC配置

    博客园 闪存 首页 新随笔 联系 管理 订阅 随笔- 4  文章- 1  评论- 0  搭建springmvc框架的另一种思路 在一个完整的项目里搭建springmvc框架的时候, 通常情况下,初学者 ...

  3. 洛谷P2015 二叉苹果树

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

  4. DEDECMS数据库执行原理、CMS代码层SQL注入防御思路

    我们在上一篇文章中学习了DEDECMS的模板标签.模板解析原理,以及通过对模板核心类的Hook Patch来对模板的解析流量的攻击模式检测,达到修复模板类代码执行漏洞的目的 http://www.cn ...

  5. 清除TFS版本控制信息

    http://blog.csdn.net/feihu_guest/article/details/8442434 How to permanently remove TFS Source Contro ...

  6. i++和++i

    这个问题总是讨论,有时又被弄晕了,特来复习一下 ; ; cout<<s<<endl; cout<<5,而i+++4返回4,其实这样的i++先运算,再加,++i先加再 ...

  7. Boost的状态机库教程(1)

    介绍 Boost状态机库一个应用程序框架,你可以用它将UML状态图快速的转换为可执行的c++代码,而不需要任何的代码生成器.它支持几乎所有的UML特征,可以直接了当的转换,并且转换后的c++代码就像对 ...

  8. mysql 导入大sql文件时 max_allowed_packet 选项的设置

    mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES ...

  9. Repository

    namespace MyRepository.Domain.Infrastructure { public class Repository<TEntity> : IRepository& ...

  10. go runtime scheduler

     http://www.slideshare.net/matthewrdale/demystifying-the-go-scheduler http://www.cs.columbia.edu/~a ...