数据库结构:
字段 类型
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-2733】永无乡 Splay+启发式合并

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2048  Solved: 1078[Submit][Statu ...

  2. input使用javascript限制输入带小数的数字

    如题,网上找了很多都不太好实现.我的实现需求如下: 1.如果输入数字不带小数点那么自动加入两位小数,如:输入5,替换为5.00 2.输入5.,替换为5.00 3.输入5.1,替换为5.10 4.输入非 ...

  3. appium按钮定位,去掉弹出框

    #coding=utf-8 这个一定要加上,不然脚本中注释中都不能有中文 ''' Created on 2015年7月2日 @author: liujuan ''' import sys reload ...

  4. POJ1088滑雪(dp+记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 86411   Accepted: 32318 Description ...

  5. 织梦DedeCms调用全站相关文章方法

    织梦DedeCms 有个标签可以调用相关文章,通过下面的修改可以调用全站的相关文章,文章页内显示相关文章内容,可以提高关键词密度,还是挺不错的. 模板调用代码 <div>     < ...

  6. php多态设计

    原文:http://www.cnblogs.com/tecs27/archive/2012/03/13/2394028.html 多态性是指相同的操作或函数.过程可作用于多种类型的对象上并获得不同的结 ...

  7. cmd+lcx+nc+sc提权工具总结

    cmd:执行命令的载体cmdshell lcx:端口映射工具 1.在自己的host上的cmd下运行:lcx.exe -listen 51 3389 //意思是监听51端口并转发到3389端口 2.在服 ...

  8. centos 搭建gitlab

    #修改yum源 yum -y install wget cd /etc/yum.repos.d wget -O CentOS-Base.repo http://mirrors.aliyun.com/r ...

  9. 使用prompt输入一句英文句子和排序方式(升/降),将所有单词按排序方式排序后在网页上输出

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. CNN 美国有线电视新闻网 wapCNN WAP 指无线应用通讯协议 ---- 美国有线电视新闻网 的无线应用

    wapCNN  wap指无线应用通讯协议  CNN美国有线电视新闻网   固, wapCNN 美国有线电视新闻网的无线应用 -------------------------------------- ...