数据库结构:
字段 类型
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. Yii2修改默认布局

    public $layout = 'layout';//在类中定义一个变量,名为$layout的php文件 <?php echo $content; ?>

  2. ZOJ1586 QS Network

    QS Network Time Limit: 2 Seconds      Memory Limit: 65536 KB Sunny Cup 2003 - Preliminary Round Apri ...

  3. 数字证书文件格式(cer和pfx)的区别

    作为文件形式存在的证书一般有这几种格式: 1.带有私钥的证书 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形 ...

  4. 设定JS全局的公共变量

    1. 新建一个标签文件 javaScriptVariables.tag 新建一个标签文件 javaScriptVariables.tag放在 %/HelloWorldWebPro/webroot/WE ...

  5. js中数组以及for循环的使用

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  6. Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差

    Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差别   Nginx连接fastcgi的方式有2种:unix domain socket和TCP,Uni ...

  7. AppSettingManager

    public class AppSettingManager { public static bool Update(string key, string value) { try { var con ...

  8. (转)DoDataExchange执行时机

    void CRegisterDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DAT ...

  9. 标准库errno.h 查看错误代码编号,errno:4 与error:2

    log 里报错,errno:4   与errno:2 查了一下 errno.h   --------下文来自百度百科 errno 编辑 errno 是记录系统的最后一次错误代码.代码是一个int型的值 ...

  10. JavaScript简易缩放程序

    一.前言: 上一篇随笔中已经把拖动程序完成了,这篇主要把缩放程序完成,后面合并后可以做成一个图片裁剪的功能 简易缩放程序DEMO:http://jsfiddle.net/UN99R/ 限制缩放程序DE ...