使用cxTreeList创建权限管理
设计数据库结构及内容格式如下
设计界面如下,打开、保存、打印这三列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;
效果展示
本文来自博客园,作者:liessay,转载请注明原文链接:https://www.cnblogs.com/liessay/p/17981107