yndbtree控件
yndbtree控件
// cxg 2017-4-25
unit yndbtree;
interface
uses
SysUtils, Classes, ComCtrls, DB, Variants
;
type
PNodeRec = ^TNodeRec;
TNodeRec = record
id: string;
name: string;
pid: string;
formname: string; // formclassname
bplname: string;
end;
type
TynDBtree = class(TTreeView)
private
FDataSet: TDataSet;
FKeyID: string;
FKeyName: string;
FParentID: string;
procedure treeclick(sender: TObject);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure CreateTree;
published
property DataSet: TDataSet read FDataSet write FDataSet;
property KeyID: string read FKeyID write FKeyID;
property KeyName: string read FKeyName write FKeyName;
property ParentID: string read FParentID write FParentID;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('yongnan', [TynDBtree]);
end;
{ TynDBtree }
constructor TynDBtree.Create(AOwner: TComponent);
begin
inherited;
Self.OnClick := treeclick;
end;
procedure TynDBtree.CreateTree;
// table struct example: id,name,pid
var
List: TStringList;
Node: TTreeNode;
Index: Integer;
PNode: PNodeRec;
begin
if not FDataSet.Active or FDataSet.IsEmpty then
Exit;
Self.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
FDataSet.First;
while not FDataSet.Eof do
begin
PNode := new(PNodeRec);
PNode^.id := FDataSet.FieldByName(FKeyID).Text;
PNode^.name := FDataSet.FieldByName(FKeyName).Text;
PNode^.pid := FDataSet.FieldByName(FParentID).Text;
if FDataSet.FindField('formname') <> nil then
PNode.formname := FDataSet.FindField('formname').AsString;
if FDataSet.FindField('bplname') <> nil then
PNode.bplname := FDataSet.FindField('bplname').AsString;
if (FDataSet.FieldByName(FParentID).Text = '') or (FDataSet.FieldByName(FKeyID).Text = FDataSet.FieldByName(FParentID).Text) then
// add root node
Node := Self.Items.AddChild(nil, FDataSet.FieldByName(FKeyName).Text)
else
begin
// add child node
Index := List.IndexOf(FDataSet.FieldByName(FParentID).Text);
Node := Self.Items.AddChild(TTreeNode(List.Objects[Index]), FDataSet.FieldByName(FKeyName).Text);
end;
Node.Data := PNode;
List.AddObject(FDataSet.FieldByName(FKeyID).Text, Node);
FDataSet.Next;
end;
finally
List.Free;
end;
end;
destructor TynDBtree.Destroy;
var
i: Integer;
Node: TTreeNode;
begin
for i := Self.Items.Count - 1 downto 0 do
begin
Node := Self.Items[i];
Dispose(PNodeRec(Node.Data));
end;
inherited;
end;
procedure TynDBtree.treeclick(sender: TObject);
begin
if Self.Selected <> nil then
FDataSet.Locate(FKeyID, VarArrayOf([PNodeRec(Self.Selected.Data)^.id]), []);
end;
end.
yndbtree控件的更多相关文章
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- HTML5 progress和meter控件
在HTML5中,新增了progress和meter控件.progress控件为进度条控件,可表示任务的进度,如Windows系统中软件的安装.文件的复制等场景的进度.meter控件为计量条控件,表示某 ...
- 百度 flash html5自切换 多文件异步上传控件webuploader基本用法
双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...
- JS与APP原生控件交互
"热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...
- UWP开发必备:常用数据列表控件汇总比较
今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- Windows API 设置窗口下控件Enable属性
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...
- VB.NET设置控件和窗体的显示级别
前言:在用VB.NET开发射频检测系统ADS时,当激活已存在的目标MDI子窗体时,被其他子窗体遮住了,导致目标MDI子窗体不能显示. 这个问题怎么解决呢?网上看到一篇帖子VB.NET设置控件和窗体的显 ...
随机推荐
- C#两个日期范围内的间隔
http://www.cnblogs.com/love_study/archive/2011/04/02/2003045.html 引用地址 1 /// <summary> /// 计算日 ...
- [转]C# 测试网络连接
原文链接:http://blog.csdn.net/lsfa1234/article/details/6291228 using System; using System.Web; using Sys ...
- Esxi5-管理平台vcenter5.0_数据库迁移流程
migrating-vcenter-database-express-to-sql-2008-r2 一. 准备环境. ESXi5.0主机 IP:192.168.1.158 ...
- 史上最全的Angular.js 的学习资源
Angular.js 的一些学习资源 基础 官方: http://docs.angularjs.org angularjs官方网站已被墙,可看 http://www.ngnice.com/: 官方zi ...
- python manage.py runserver 0.0.0.0:8000
python manage.py runserver 这种命令行,可以在服务器端输入IP:8000直接访问 在 python manage.py runserver 127.0.01:8000 在服务 ...
- --- no python application found, check your startup logs for errors
--- no python application found, check your startup logs for errors 碰到这个问题,请留意下系统执行的python版本和自己的djan ...
- 102. Binary Tree Level Order Traversal + 103. Binary Tree Zigzag Level Order Traversal + 107. Binary Tree Level Order Traversal II + 637. Average of Levels in Binary Tree
▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ ...
- leetcode400
public class Solution { public int FindNthDigit(int n) { //StringBuilder sb = new StringBuilder(); / ...
- matplotlib —— 添加文本信息(text)
[详细]http://hyry.dip.jp/tech/book/page/scipy/matplotlib_fast_plot.html http://blog.csdn.net/lanchunhu ...
- Python运维开发基础08-文件基础
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...