Unigui树形TreeView的使用

Treeview使用还是较多的,树形结构的生成,在管理系统中部门架构使用的很多,并且可能还有多个窗体多次调用。在Unigui开的时候,为了提高生成的效率,我吧树形TUniMenuItem在主页面生成,共享给其他页面使用的treeview控件使用。为了提高遍历效率,第一次吧所有节点数据载入的内存表,在内存表中在进行操作。

部门表有ID,dept_name,Parent_id

 免费人力资源管理软件,免费Mes系统,免费仓库管理软件WMS

功能预览地址 http://ehr.kopsoft.cn

 

1,生成第一级菜单

procedure TAppMainForm.GetDept;
var
MenuItem: TUniMenuItem;
vrtltbl_dept: TVirtualTable;
begin

unqry_dept.Close;
unqry_dept.SQL.Text := 'SELECT * FROM [dbo].[Table_HR_Department] WHERE [IS_CANCEL]=0 ORDER BY ORDER_ID';
unqry_dept.Open;

vrtltbl_dept := TVirtualTable.Create(Self);
vrtltbl_dept.Assign(unqry_dept);
vrtltbl_dept.Open;

vrtltbl_dept.Filtered := False;
vrtltbl_dept.Filter := 'DEPT_PARENT_ID=' + IntToStr(0);
vrtltbl_dept.Filtered := True;

while not vrtltbl_dept.eof do
begin
MenuItem := TUniMenuItem.Create(Self);
MenuItem.Caption := vrtltbl_dept.FieldByName('DEPT_NAME').AsString;
MenuItem.Tag := vrtltbl_dept.FieldByName('DEPT_ID').AsInteger;
unmntms_Main_Dept.Items.Add(MenuItem);

GetChildDept(MenuItem);//子节点的递归
vrtltbl_dept.Next;
end;

end;

 

 

 

 

2,子节点递归


procedure TAppMainForm.GetChildDept(ParentMenuIte: TUniMenuItem);
var
ChildMenuItem: TUniMenuItem;
vt: TVirtualTable;
begin
vt := TVirtualTable.Create(Self);
vt.Assign(unqry_dept);
vt.Open;

vt.Filtered := False;
vt.Filter := 'DEPT_PARENT_ID=' + IntToStr(ParentMenuIte.Tag);
vt.Filtered := True;

while not vt.Eof do
begin

ChildMenuItem := TUniMenuItem.Create(Self);
ChildMenuItem.Caption := vt.FieldByName('DEPT_NAME').AsString;
ChildMenuItem.Tag := vt.FieldByName('DEPT_ID').AsInteger;
ParentMenuIte.Add(ChildMenuItem);

GetChildDept(ChildMenuItem);
vt.Next;
end;
vt.Destroy;

end;

posted @ 2020-08-09 18:46  HelloWorld2008  阅读(944)  评论(0)    收藏  举报