首页 > 其他分享 >使用cxTreeList创建权限管理

使用cxTreeList创建权限管理

时间:2024-01-22 21:22:46浏览次数:31  
标签:begin end 创建 cxTreeList1 Values cxTreeList 权限 节点 Memo1

设计数据库结构及内容格式如下

设计界面如下,打开、保存、打印这三列Properties改为CheckBox方式显示

加载菜单代码如下

procedure TForm1.Button1Click(Sender: TObject);
var
  pNode: TcxTreeListNode;  // 父节点
  RootKey: string;  // 根节点的键值
  RootNode, ChildNode: TcxTreeListNode;  // 根节点和子节点

// 根据键值查找对应的根节点

  function FindRootNodeByKey(const Key: string): TcxTreeListNode;
  var
    i: Integer;
  begin
    for i := 0 to cxTreeList1.Count - 1 do
    begin
      Result := cxTreeList1.Items[i];
      if CompareText(Result.Values[4], Key) = 0 then
        Exit;
    end;
    Result := nil;
  end;

begin
  cxTreeList1.Clear;  // 清空树列表

  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.add('select * from db.dbo.Menu');  // 查询数据库中的菜单数据
    SQL.add('order by id');  // 按ID排序
    Open;

    if RecordCount > 0 then
    begin
      First;
      while not eof do
      begin
        if FieldByName('pid').AsInteger = 0 then
        begin
      // 如果父节点的pid为0,则为根节点
          pNode := cxTreeList1.Add;
          pNode.Values[0] := FieldByName('caption').AsString;  // 设置节点的文本
          pNode.Values[1] := False;
          pNode.Values[2] := False;
          pNode.Values[3] := False;
          pNode.Values[4] := FieldByName('id').AsString;  // 设置节点的键值
        end
        else
        begin
      // 如果父节点的pid不为0,则为子节点
          RootKey := FieldByName('pid').AsString;
          RootNode := FindRootNodeByKey(RootKey);  // 根据键值查找对应的根节点
          ChildNode := RootNode.AddChild;  // 在根节点下添加子节点
          ChildNode.Values[0] := FieldByName('caption').AsString;  // 设置节点的文本
          ChildNode.Values[1] := False;
          ChildNode.Values[2] := False;
          ChildNode.Values[3] := False;
          ChildNode.Values[4] := FieldByName('id').AsString;  // 设置节点的键值
        end;
        Next;
      end;
    end;
  end;
end;

这段代码是一个按钮的点击事件处理程序。它从数据库中查询菜单数据,并将数据显示在一个树状列表控件中。代码首先清空树列表,然后执行数据库查询操作。对于每一条查询结果,根据父节点的pid字段判断是根节点还是子节点,并将节点的文本和键值设置好,然后添加到树列表中。最后,更新游标到下一条查询结果,直到查询结束。

展开和关闭按钮事件

  cxTreeList1.FullExpand;  //全部展开
  cxTreeList1.FullCollapse;//全部关闭

选中后显示选中内容代码如下

procedure TForm1.cxTreeList1SelectionChanged(Sender: TObject);
begin
  Memo1.Clear;
  Memo1.Lines.Add('选中项:' + cxTreeList1.FocusedNode.Values[0]);
  Memo1.Lines.Add('打开:' + cxTreeList1.FocusedNode.Values[1]);
  Memo1.Lines.Add('保存:' + cxTreeList1.FocusedNode.Values[2]);
  Memo1.Lines.Add('打印:' + cxTreeList1.FocusedNode.Values[3]);
end;

循环显示勾选的内容代码如下

procedure TForm1.Button4Click(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i := 0 to cxTreeList1.AbsoluteCount - 1 do
  begin
    if cxTreeList1.AbsoluteItems[i].Values[1] = True then
    begin
      Memo1.Lines.Add('打开:' + cxTreeList1.AbsoluteItems[i].Values[0]);
    end;
    if cxTreeList1.AbsoluteItems[i].Values[2] = True then
    begin
      Memo1.Lines.Add('保存:' + cxTreeList1.AbsoluteItems[i].Values[0]);
    end;
    if cxTreeList1.AbsoluteItems[i].Values[3] = True then
    begin
      Memo1.Lines.Add('打印:' + cxTreeList1.AbsoluteItems[i].Values[0]);
    end;
  end;
end;

效果展示

 

标签:begin,end,创建,cxTreeList1,Values,cxTreeList,权限,节点,Memo1
From: https://www.cnblogs.com/liessay/p/17981107

相关文章

  • RHCE第二周(文件的权限管理)
     一:初识文件权限1:为什么需要文件权限如果没有权限的话,所有人都能访问这个文件,对于所有人来说是透明的,所以需要文件权限来限制用户进行访问,系统就有安全保证2:权限的实质就是系统中的每个文件和目录都有uid和gid(哪些是用户创建的,文件和目录就会自动的继承这个用户的uid和gid),表......
  • Idea 创建SpringBoot小计
    创建spring工程之后maven依赖包拉不下来去官网下载maven并配置maven环境变量  下载地址:http://maven.apache.org/download.cgi解压后,修改mavensetting配置文件,增加国内镜像地址添加阿里云国内镜像  idea配置本地maven配置如下图  之后应该就......
  • 深入分析若依数据权限@datascope (注解+AOP+动态sql拼接) 【循序渐进,附分析过程】
    除了我们平时都知道的路由权限(即对接口的访问权限外),在日常生产开发中,我们还应该有对数据的访问权限。在若依这个框架中,通过角色中的数据范围这个属性来对数据权限进行控制。对应实体类:深入分析一个用户肯定是有一种角色的,也肯定是隶属于一个部门的。这里咱们就以用户在......
  • 华企盾DSC的如何管控企业文件外发权限的?
    随着企业运营的数据化,信息已成为决策、优化和竞争的关键。然而,数据资产的价值,也使其成为了各种风险的目标。尤其在员工共享和外发文件时,无论是无意的错误操作还是恶意的信息窃取,都可能导致重要数据的风险暴露。因此,将如何管控企业文件外发权限落到实处,就显得至关重要。一、文件......
  • Git必知必会基础(06):分支创建、切换、更新、删除、拉取(fetch)
     简介分支就是版本上的更新送代,默认只有master主分支可以从主分支上分离出其他的分支,各分支间互不干扰每个项目,一般有多个分支,比如master(主干分支)、开发分支、测试分支、生产bug分支等等线上环境,一个项目也可能会有多个稳定分支同时在线上运行但是,分支越多,后期合并分支的成本越大,......
  • 根据返回的多层Json来进行创建文件,达到根据阶层创建,然后压缩成压缩包进行下载
    临时接到一个需求说让根据按照下面的这个图片的结构来打包下载指定位置下的文件到指定位置!实现思路:1.把已经实现的树形结构的代码进行调用,拿到他的数据进行创建对应的文件夹2.因为结构下方的文件没有特别直观的数据库中的关联关系,所以还需要对于管理关系进行梳理3.创......
  • 华企盾DSC:外发文件设置编辑权限 阅读次数 阅后即焚 文件过期
    互联网时代,信息流通迅速,一份关键的内部文件一旦外泄,可能毁掉公司数月、甚至数年的努力。企业多次碰壁后终于发现,仅仅依靠员工层层审批、体系内控制,已难以防止数据泄密这一严重问题。更为糟糕的是,一旦文件发送出去,系统往往不能有效地控制未授权阅读的发生。痛定思痛,企业用户渴望有......
  • 汇编-创建多模块程序
     大型源文件难于管理且汇编速度慢。可以把单个文件拆分为多个包含文件,但是,对其中任何源文件的修改仍需对所有的文件进行整体汇编。更好的方法是把一个程序划分为模块(module)(汇编单位)。每个模块可以单独汇编,因此,对一个模块源代码的修改就只需要重新汇编该模块。链接器将所......
  • 实现创建二叉树
    创建二叉树1.前序遍历创建二叉树importjava.util.Scanner;//注意类名必须为Main,不要有任何packagexxx信息classTreeNode{publicTreeNodeleft;publiccharval;publicTreeNoderight;publicTreeNode(charval){this.val=......
  • 将 .NET 8应用 以 dotnet publish 创建容器镜像并结合 Github Actions 部署到 Azure
    介绍.NET8无需DockerFile即可为.NET应用创建docker映像的新方法,我将使用dotnetpublish将.NET应用容器化,在本文中,我将分享我如何为.NET8的项目创建一个简单的ci/cd的经验。它包括2个主题:创建用于生成.NET应用并将其发布到Azure的GitHub工作流如何使用do......