unit untTree;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses,
uniGUIClasses, uniGUIFrame, uniGUIBaseClasses, uniToolBar, uniTreeView,
Data.DB, Datasnap.DBClient, untEditBase, untDll;

type
PNodeRec = ^TNodeRec;

TNodeRec = record
id: string;
name: string;
pid: string;
end;

type
TfrmTree = class(TUniFrame)
UniToolBar1: TUniToolBar;
btnQuery: TUniToolButton;
btnAppend: TUniToolButton;
btnEdit: TUniToolButton;
btnDelete: TUniToolButton;
ClientDataSet1: TClientDataSet;
UniTreeView1: TUniTreeView;
btnExpand: TUniToolButton;
btnCollapse: TUniToolButton;
procedure btnExpandClick(Sender: TObject);
procedure btnCollapseClick(Sender: TObject);
procedure UniTreeView1Click(Sender: TObject);
private
{ Private declarations }
protected
procedure append(f: TfrmEditBase);
function Del(const table: string): Boolean;
procedure edit(f: TfrmEditBase);
procedure Query(const sql: string);
public
{ Public declarations }
end;

procedure CreateTree(dataset: TClientDataSet; treeview: TUniTreeView);
procedure FreeTree(treeview: TUniTreeView);

implementation

{$R *.dfm}
{ TfrmTree }

procedure CreateTree(dataset: TClientDataSet; treeview: TUniTreeView);
// table struct example: id,name,pid
var
List: TStringList;
Node: TUniTreeNode;
Index: Integer;
PNode: PNodeRec;
begin
treeview.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
dataset.First;
while not dataset.Eof do
begin
PNode := new(PNodeRec);
PNode^.id := dataset.Fields[0].Text;
PNode^.name := dataset.Fields[1].Text;
PNode^.pid := dataset.Fields[2].Text;
if (dataset.Fields[2].Text = '') or
(dataset.Fields[0].Text = dataset.Fields[2].Text) then
// add root node
Node := treeview.Items.AddChild(nil, dataset.Fields[1].Text)
else
begin
// add child node
Index := List.IndexOf(dataset.Fields[2].Text);
Node := treeview.Items.AddChild(TUniTreeNode(List.Objects[Index]),
dataset.Fields[1].Text);
end;
Node.Data := PNode;
List.AddObject(dataset.Fields[0].Text, Node);
dataset.Next;
end;
finally
List.Free;
end;
end;

procedure FreeTree(treeview: TUniTreeView);
var
i: Integer;
Node: TUniTreeNode;
begin
for i := treeview.Items.Count - 1 downto 0 do
begin
Node := treeview.Items[i];
Dispose(PNodeRec(Node.Data));
end;
end;

procedure TfrmTree.append(f: TfrmEditBase);
begin
ClientDataSet1.append;
if UniTreeView1.Selected <> nil then
begin
ClientDataSet1.Fields[0].Text := PNodeRec(UniTreeView1.Selected.Data)^.id;
ClientDataSet1.Fields[2].Text := PNodeRec(UniTreeView1.Selected.Data)^.id;
end;
f.FClientDataSet := ClientDataSet1;
f.ShowModal(
procedure(Res: Integer)
begin
CreateTree(ClientDataSet1, UniTreeView1);
end);
end;

procedure TfrmTree.btnCollapseClick(Sender: TObject);
begin
UniTreeView1.FullCollapse;
end;

procedure TfrmTree.btnExpandClick(Sender: TObject);
begin
UniTreeView1.FullExpand;
end;

function TfrmTree.Del(const table: string): Boolean;
begin
if ClientDataSet1.IsEmpty then
Exit;
MessageDlg('是否删除?', mtConfirmation, mbYesNo,
procedure(Res: Integer)
begin
if Res = mrYes then
begin
ClientDataSet1.Delete;
if untDll.SaveData(table, ClientDataSet1.Delta) then
begin
ClientDataSet1.MergeChangeLog;
ShowMessage('删除成功');
end
else
ShowMessage('删除失败');
end;
end);
end;

procedure TfrmTree.edit(f: TfrmEditBase);
begin
if ClientDataSet1.IsEmpty then
Exit;
ClientDataSet1.edit;
f.FClientDataSet := ClientDataSet1;
f.ShowModal(
procedure(Res: Integer)
begin
CreateTree(ClientDataSet1, UniTreeView1);
end);
end;

procedure TfrmTree.Query(const sql: string);
begin
ClientDataSet1.Data := untDll.QuerySql(sql);
if ClientDataSet1.IsEmpty then
Exit;
CreateTree(ClientDataSet1, UniTreeView1);
end;

procedure TfrmTree.UniTreeView1Click(Sender: TObject);
begin
if not ClientDataSet1.IsEmpty then
ClientDataSet1.Locate(ClientDataSet1.Fields[0].FieldName,
VarArrayOf([PNodeRec(UniTreeView1.Selected.Data)^.id]), []);
end;

end.

unigui TUniTreeView demo的更多相关文章

  1. uniGUI试用笔记(十四)TUniTreeView的CheckBox

    TUniTreeView目前版本没有封装CheckBox功能,所以需要手工处理,幸好0.99版提供部分代码了,修改过程如下: 1.uniGUIAbstractClasses.pas单元中修改基类TUn ...

  2. uniGUI试用笔记(二)

    前几天做的demo今天启动后,浏览器打开页面后死活不显示窗体,找了半天原因才发现是360浏览器启动了兼容模式,改成极速模式后就正常了.有点晕.... 今天简单测试了TUniGUIServerModul ...

  3. 用uniGUI做B/S下业务系统的产品原型体验

    从10月份到重庆工作后,一直忙于工作,感兴趣的几个方面的技术都处于暂停. 一个多月来,按照公司要求在做B/S集中式基卫产品的原型,主要是画原型图,开始是用Axure,弄来弄去感觉功能还是弱了些,尤其是 ...

  4. UNIGUI:How to redirect and close session?

    Hello, i would have 2 unigui app. the first app is a simple authentification app and second will be ...

  5. unigui菜单【3】

    unigui菜单TuniTreeView 根据数据库表中的内容,显示菜单的处理: function TMainForm.CreateMenu: Integer; var myMenuPoint : P ...

  6. unigui的session【1】

    目前是1394. 明白session如何使用管理,看demo Session List和SessionTimeout unit Main; interface uses Windows, Messag ...

  7. uniGUI之学习方法(18)

    官方例子D:\Program Files\FMSoft\Framework\uniGUI\Demos\Desktop 在Design里Main上右键,View as Form看到变化的属性. 看出变化 ...

  8. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  9. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

随机推荐

  1. CSS之弧形阴影

    简述 网页上经常会出现一些弧形的阴影效果,看起来很漂亮,下面我们来讲述下如何用CSS来实现一个弧形阴影. 简述 阴影 效果 注释 标题 效果 源码 合并 效果 源码 阴影 效果 首先实现一个简单的阴影 ...

  2. BZOJ 1787 紧急集合

    LCA.注意细节. #include<iostream> #include<cstdio> #include<cstring> #include<algori ...

  3. android linux shell 日期设置

    /************************************************************************ android linux shell 日期设置 * ...

  4. 20160205.CCPP体系详解(0015天)

    程序片段(01):01.杨辉三角.c 内容概要:杨辉三角 #include <stdio.h> #include <stdlib.h> #define N 10 //01.杨辉 ...

  5. HDU 4750

    解题方法,,,首先应该可以看出来是一颗 最小生成树,任意一条的边的价值是不同的:所以计算出最小生成树的每一条边有多少对顶点满足他的 f 值就是这条边的 权值,因此可以在生成最小生成树的时候,进行一下统 ...

  6. phonegap 检查是否有网络

    在主active onCreate函数中实现 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(sa ...

  7. grep -A -B选项详解和mysqlbinlog

    grep的-A-B-选项详解(转)[@more@] grep能找出带有关键字的行,但是工作中有时需要找出该行前后的行,下面是解释 1. grep -A1 keyword filename 找出file ...

  8. java jodd框架介绍及使用示例

    Jodd是一个普通开源Java包.你可以把Jodd想象成Java的"瑞士军刀",不仅小,锋利而且包含许多便利的功能.Jodd 提供的功能有:  提供操作Java bean,  可以 ...

  9. Word排版成树形结构技巧

    初始文字 A A1 A2 B1 B1 B2 C C1 希望效果 关健设置

  10. 顶 兼容各种浏览器js折叠菜单

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