用数据表创建树_delphi教程
数据库结构:
字段 类型
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教程的更多相关文章
- ECSHOP数据表结构完整仔细说明教程
From:http://www.ecshop119.com/ecshopjc-868.html s_account_log //用户账目日志表 字段 类型 Null 默认 注释 log_id medi ...
- ECSHOP数据表结构完整仔细说明教程 (http://www.ecshop119.com/ecshopjc-868.html)
s_account_log //用户账目日志表 字段 类型 Null 默认 注释 log_id mediumint(8) 否 自增ID号 user_id mediumint(8) 否 用户登录 ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- XamarinSQLite教程创建数据表
XamarinSQLite教程创建数据表 新创建的数据库没有任何表.开发者需要手动添加数据表,并添加测试所需的数据. 1.创建数据表 为了存储数据,开发者需要添加自己的表,并设计表的结构.操作步骤如下 ...
- MySQL中表的复制以及大型数据表的备份教程
MySQL中表的复制以及大型数据表的备份教程 这篇文章主要介绍了MySQL中表的复制以及大型数据表的备份教程,其中大表备份是采用添加触发器增量备份的方法,需要的朋友可以参考下 表复制 mysq ...
- WordPress插件制作教程(五): 创建新的数据表
上一篇讲解了怎样将数据保存到数据库,今天为大家讲解创建新的数据表,也就是说当我们激活插件的时候,会在该数据库下面创建一个新的数据表出来.原理很简单,激活插件的时候运行创建数据库的代码.看下面代码: & ...
- Android实战简易教程-第二十五枪(基于Baas的数据表查询下拉刷新和上拉载入实现!)
上一节我们实现了数据表的载入,可是,当数据表数据非常多时.我们就要考虑数据的分页.这里我们选用了PullToRefreshListView控件,先看一下该控件的说明: 效果图: ...
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 改用C++生成自动化数据表
改用C++生成自动化数据表 前面的文章中,我们讨论了使用一个基于.NET的第三方程序库来从程序中来生成数据表.在我看来,这整个思路是非常有用的,例如为显示测试结果.我经常会自己在博客中尝试各种像这样的 ...
随机推荐
- 【HDU 1445】Ride to School
题 题意 骑自行车,等0时开始最早出发的人,一起出发,然后被别人超过时,就追上去,终点距离是4.5km,速度单位是km/s,求到达的时间(s). 分析 贪心,找0时开始最早到的即可. 代码 #incl ...
- request.getAttribute() 和 request.getParameter() 有何区别?
HttpServletRequest类既有getAttribute()方法,也由getParameter()方法,这两个方法有以下区别: (1)HttpServletRequest类有setAttri ...
- 21.Android之SQLite数据库学习
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...
- 关于clonezilla
Clonezilla 是一个很好的系统克隆工具,它可以说是吸取了 Norton Ghost 和 Partition Image 的优点.即不仅支持对整个系统进行克隆,而且也可以克隆单个的分区,这种灵活 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Linux下安装Nginx详细图解教程
什么是Nginx? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,在高连接并发的情况下N ...
- Linux命令 ,在当前目录下查找一个,或者多个文件
1,find ./ -name "y*" 查找以y开头的文件. 2,列出gearman进程 ps -aux | grep gearman 3,查看一个文件下,所有文件夹的大小 du ...
- 最长不下降子序列(LIS)
最长上升子序列.最长不下降子序列,解法差不多,就一点等于不等于的差别,我这里说最长不下降子序列的. 有两种解法. 一种是DP,很容易想到,就这样: REP(i,n) { f[i]=; FOR(j,,i ...
- Spring常用annotation标签
@Service @Scope @Transactional @Autowired @Qualifier @PostConstruct @PreDestroy
- zstu.4194: 字符串匹配(kmp入门题&& 心得)
4194: 字符串匹配 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 206 Solved: 78 Description 给你两个字符串A,B,请 ...