我的dbtreeview–treeview直接连接数据表_delphi教程
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DB, DBTables, ComCtrls, Grids, DBGrids, ExtCtrls,
DBCtrls, Mask, ImgList;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
ImageList1: TImageList;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
Label1: TLabel;
Label2: TLabel;
DBEdit2: TDBEdit;
Table1: TTable;
Label3: TLabel;
DBNavigator1: TDBNavigator;
Label4: TLabel;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
procedure FormCreate(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure DataSource1StateChange(Sender: TObject);
procedure Table1AfterInsert(DataSet: TDataSet);
procedure Table1BeforeDelete(DataSet: TDataSet);
procedure Table1BeforeEdit(DataSet: TDataSet);
procedure Table1AfterDelete(DataSet: TDataSet);
procedure Table1AfterPost(DataSet: TDataSet);
private
function GetFieldList: TStringList;
{ Private-Declarationen }
public
{ Public-Declarationen }
end;
var
Form1: TForm1;
FieldList: TStringList;
implementation
uses TreeFunc;
{$R *.DFM}
function TForm1.GetFieldList: TStringList;
begin
FieldList.clear;
FieldList.add(Table1.fieldbyname(Country).asstring);
FieldList.add(Table1.fieldbyname(city).asstring);
FieldList.add(Table1.fieldbyname(Company).asstring);
Result := FieldList;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FieldList := TStringList.create;
TreeView1.items.BeginUpdate;//forbid treeview update
Table1.first;
while not Table1.eof do
begin
TreeAddItem(TreeView1, GetFieldList, Table1.getBookmark, false);//生成结点
Table1.next;
end;
FieldList.clear;
TreeView1.Alphasort;
TreeView1.items.Endupdate;
//make first record selected:
TreeView1.items[2].selected := true;
end;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Datasource1.enabled := Node.data <> nil;
if DataSource1.enabled then Table1.Gotobookmark(node.data);
end;
procedure TForm1.DataSource1StateChange(Sender: TObject);
var
ItemList: TStringList;
Node: TTreeNode;
begin
end;
procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
FieldList.clear;
end;
procedure TForm1.Table1BeforeDelete(DataSet: TDataSet);
begin
GetFieldList;
end;
procedure TForm1.Table1BeforeEdit(DataSet: TDataSet);
begin
GetFieldList;
end;
procedure TForm1.Table1AfterDelete(DataSet: TDataSet);
var
CascadeDeleteLevel: Integer;
begin
CascadeDeleteLevel := 0;
TreeDeleteItem(TreeView1, FieldList, CascadeDeleteLevel);
end;
procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
TreeView1.items.beginUpdate;
if FieldList.count > 0 then TreeDeleteItem(TreeView1, Fieldlist, 0);
TreeView1.selected := TreeAddItem(TreeView1, GetFieldlist, Table1.getbookmark, True);
TreeView1.items.endUpdate;
end;
end.
///————————
unit TreeFunc;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs;
function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode;
function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
implementation
function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode;
var
ThisNode, Node: TTreeNode;
I: Integer;
begin
Node := nil; //nil = level 0 has no parent node
//this is checked by TreeFindItem
for I := 0 to Itemlist.count -1 do
begin //for
ThisNode := TreeFindItem(Sender, node, Itemlist[i]);
if ThisNode <> nil then
Node := ThisNode
else
begin
if I < Itemlist.count -1 then
begin
if I = 0 then
Node := Sender.items.Add(Node, Itemlist[i])
else
Node := Sender.items.AddChild(Node, Itemlist[i]);
end
else
begin
if I = 0 then
Node := Sender.items.AddObject(Node, Itemlist[i], Bookmark)
else
Node := Sender.items.AddChildObject(Node, Itemlist[i], Bookmark);
end;
Node.stateIndex := Node.level + 1;
if Resort and (Node.parent <> nil) then Node.parent.alphasort;
end;
end; //for
Result := Node;
end;
function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
begin
if NodeItem = nil then NodeItem := Sender.items.getfirstnode
else NodeItem := NodeItem.getfirstchild;
//NodeItem is now the first item of the desired level
//if this level has no items, NodeItem is nil
if (NodeItem <> nil) and (NodeItem.text <> Name) then
repeat
NodeItem := NodeItem.getnextsibling;
until (NodeItem = nil) or (NodeItem.text = Name);
Result := NodeItem;
end;
function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
begin
Result := TreeAddItem(Sender, Itemlist, nil, false);
end;
procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
var
Node, Parent: TTreeNode;
begin
Node := TreeGetItem(Sender, ItemList);
while Node.level >= Level do
begin
Parent := Node.parent;
Node.delete;
if (Parent = nil) or (Parent.hasChildren) then break;
Node := Parent;
end;
end;
end.
我的dbtreeview–treeview直接连接数据表_delphi教程的更多相关文章
- access treeview读取数据表成树并与子窗体联动
Private Sub Form_Load()Dim i As IntegerDim rst As DAO.RecordsetSet rst = CurrentDb.OpenRecordset(&qu ...
- Winfrom treeview 如何从多个数据表中获取数据动态生成
本文转载:http://www.cnblogs.com/VincentLuo/archive/2008/03/29/1128987.html 在 汪洋怡舟的这篇文章中[http://www.cnblo ...
- treeview自动从表中添加标题和列值做目录的方法2
treeview自动从表中添加标题和列值做目录的方法2,该方法是借鉴万一老师的 http://www.cnblogs.com/del/archive/2008/05/15/1114450.html 首 ...
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- C#向sql server数据表添加数据源代码
HoverTree解决方案 学习C#.NET,Sql Server,WinForm等的解决方案. 本文链接http://hovertree.com/h/bjaf/0jteg8cv.htm 使用的技术. ...
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- MySQL数据表range分区例子
某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过10 ...
- 删除Mysql数据表中多余的重复记录的sql语句
数据表 sniper_tb 中存在主键 id,字段url,现需要在url字段上添加 unique,但由于url存在重复记录,导致添加失败. 如何删除表中多余的url重复记录,仅保持一条? 思路一 将 ...
随机推荐
- 机器学习 三剑客 之 pandas + numpy
机器学习 什么是机器学习? 机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测 机器学习存在的目的和价值领域? 领域: 医疗.航空.教育.物流.电商 等... 目的: 让机器学习 ...
- Robot Framework--运行pybot时出错
1.在Execution Profile中选择 pybot,点击 start,报错,找不到指定文件 2.在cmd中运行pybot.bat也是报错---pybot is not define 3.找到p ...
- 场效应管种类-场效应管N、P沟道与增强、耗尽型工作原理等知识详解 如何选用晶体三极管与场效应管的技巧
http://www.kiaic.com/article/detail/1308.html 场效应管种类场效应管 场效应晶体管(Field Effect Transistor缩写(FET))简称场效应 ...
- c++ string类基本使用
初始化用法 #include <iostream> #include "string" using namespace std; void main() { strin ...
- BZOJ 3576: [Hnoi2014]江南乐 (SG函数)
题意 有nnn堆石子,给定FFF,每次操作可以把一堆石子数不小于FFF的石子平均分配成若干堆(堆数>1>1>1). 平均分配即指分出来的石子数中最大值减最小值不超过111.不能进行操 ...
- TFS命令行
tfs命令工具: https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/9s5ae285 ...
- PHP mysqli_errno() 函数
返回最近调用函数的最后一个错误代码: <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect("localhos ...
- 彻底搞懂prototype和__proto__
prototype是函数特有的属性,是Function的静态属性:__proto__是对象特有的属性. 因为函数本身是一种对象,所以函数既有prototype属性也有__proto__属性. 当函数使 ...
- Activiti服务类- ManagementService服务类
一共含有17个方法 // 获取包含了Activiti数据库模式的{表名.行计数}项的映射.Map<String, Long> getTableCount();//获取诸如任务.执行之类的A ...
- CF103D Time to Raid Cowavans 根号分治+离线
题意: 给定序列 $a,m$ 次询问,每次询问给出 $t,k$. 求 $a_{t}+a_{t+k}+a_{t+2k}+.....a_{t+pk}$ 其中 $t+(p+1)k>n$ 题解: 这种跳 ...