菜单树

// add by cxg 2017-4-18

unit uTree;

interface

uses
SysUtils, Classes, ComCtrls, DB, DBClient;

type
PNodeRec = ^TNodeRec;

TNodeRec = record // 树节点记录
id: string;
name: string;
pid: string;
formname: string; // add by cxg 2017-2-14
bplname: string; // add by cxg 2017-4-18
end;

procedure CreateTree(dataset: TClientDataSet; treeview: TTreeView; id, aname, parentid: string);

procedure FreeTree(treeview: TTreeView);

implementation

procedure CreateTree(dataset: TClientDataSet; treeview: TTreeView; id, aname, parentid: string);
// table struct example: id,name,pid
var
List: TStringList;
Node: TTreeNode;
Index: Integer;
PNode: PNodeRec;
begin
if not dataset.Active or dataset.IsEmpty then
Exit;
treeview.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
dataset.First;
while not dataset.Eof do
begin
PNode := new(PNodeRec);
PNode^.id := dataset.FieldByName(id).Text;
PNode^.name := dataset.FieldByName(aname).Text;
PNode^.pid := dataset.FieldByName(parentid).Text;
// add by cxg 2017-2-14
if dataset.FindField(‘formname‘) <> nil then
PNode.formname := dataset.FindField(‘formname‘).Text;
// add by cxg 2017-4-18
if dataset.FindField(‘bplname‘) <> nil then
PNode.bplname := dataset.FindField(‘bplname‘).Text;
if (dataset.FieldByName(parentid).Text = ‘‘) or (dataset.FieldByName(id).Text = dataset.FieldByName(parentid).Text) then
// add root node
Node := treeview.Items.AddChild(nil, dataset.FieldByName(aname).Text)
else
begin
// add child node
Index := List.IndexOf(dataset.FieldByName(parentid).Text);
Node := treeview.Items.AddChild(TTreeNode(List.Objects[Index]), dataset.FieldByName(aname).Text);
end;
Node.Data := PNode;
List.AddObject(dataset.FieldByName(id).Text, Node);
dataset.Next;
end;
finally
List.Free;
end;
end;

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

end.

时间: 2024-11-10 01:18:46

菜单树的相关文章

DWZ SSH2 菜单树--使用Struts2 标签(iterator/set/if 组合使用)

最近在研究DWZ框架,然后要写一个菜单树,后台我使用了SSH2,然后想把菜单通过后台传过来的对象展示出来. 但是,发现应用样式的时候,如果子菜单在子循环中为空的话,会多出一对空标签“<ul></ul>”,而DWZ的框架的样式,一旦发现标签<li>下出现标签“<ul></ul>”, 不论标签“<ul></ul>”里的内容是否为空,都会判断<li>为父级菜单,不是为最终的子菜单. 所以我只能在页面的父级循环中使用s

JavaScript菜单树

OA系统,ERP系统这样的管理自动化系统.设计者们,总喜欢将菜单放在左侧.菜单太多了,分类折叠是必然的选择.这样既可以有力于菜单模块的管理,也可以方便操作.如下的一个菜单示例: 这样的菜单,我做了一个简单的.自己写了一个TheTree的类,效果还不错,贴上样式,还是杠杠的. 详细的源码可以访问我的github: [email protected]:YeRuGeMiMi/TheTree.git 下面是我的开发过程: 1.生成菜单 我第一步写的菜单是直接硬编码在html中: 1 <ul> 2 &l

zTree插件实现菜单树

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 <title>Title</title> 7 <link href="JS/tool/zT

Ztree菜单树数据回显

Ztree菜单树数据回显,分两部分查询数据: 其一: 根据实体id查询出其关联的菜单数据 其二: 查询所有的菜单数据. 然后,使用Ztree API中进行菜单数据回显的数据进行回显数据,勾选菜单复选框. 代码 1 //2.设置菜单树的全局变量 2 var setting = { 3 data : { 4 key : { 5 title : "t" 6 }, 7 simpleData : { //开启简单数据 8 enable : true, 9 } 10 }, 11 check : {

二级菜单树

两级导航菜单树jquery插件特效 作者:佳明妈 来源:jquery 特效 2012-03-22 人气:30725 两级导航菜单树jquery插件特效调用方法:$.jq51menu(#menubox,div.submenu); 这里的#menubox 是主菜单的ID,div.submenu是子菜单的ID.两级导航菜单树的样式很丑陋,懒人建站嘛,俺够懒,就懒得写好 两级导航菜单树jquery插件特效调用方法:$.jq51menu("#menubox","div.submenu&

递归加载菜单树

1.创建数据库表 create table system_resource ( id bigint(11) not null primary key auto_increment comment 'id', resource_name varchar(20) not null comment '资源名称', resource_name_cn varchar(20) not null comment '资源中文名', resource_parent_name varchar(20) null co

简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N&gt;=4)种方法

权限系统,Web开发常见标准子系统之一.结合自己的一些思考和实践,从本篇开始权限系统的设计与实现之路. 最近,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇,只是大致介绍下这个问题,并给出4种方法的整体思路,后续再分别详细介绍这4种方法,再往后介绍完整的权限系统的设计与实现. 权限表的结构: acl.parent_acl, 最重要的就是这2个字段,有了这2个字段,就可以构造一棵树了. 前端需要的json格式: "data":[{ "acl":

nui UI 具有右键属性的菜单树

参考示例:树右键菜单                 一:创建ContextMenu     <ul id="treeMenu" class="nui-contextmenu"  onbeforeopen="onBeforeOpen">           <li iconCls="icon-move" onclick="onMoveNode">移动节点</li>   

java框架 初始化菜单树

  @RequestMapping("/tree") @DoLog(cnContent = "权限树初始化", value = false) //@Permission(name = "login.tree") public String tree(HttpServletRequest request, HttpServletResponse response, ZTreeComm zTree) throws Exception { try {

Js编写的菜单树

只需要提供这种JSON格式就ok了 其他的都可以直接引用这个代码进去 var testMenu=[ { "name": "一级菜单", "submenu": [ { "name": "二级菜单", "url": "" }, { "name": "二级菜单", "url": "" } ] }