标签:同步控制 lis 集中 alt 利用 最大 改进 空闲 算法
Treeview使用还是较多的,树形结构的生成,在管理系统中部门架构使用的很多,并且可能还有多个窗体多次调用。在Unigui开的时候,为了提高生成的效率,我吧树形TUniMenuItem在主页面生成,共享给其他页面使用的treeview控件使用。为了提高遍历效率,第一次吧所有节点数据载入的内存表,在内存表中在进行操作。
部门表有ID,dept_name,Parent_id
功能预览地址 http://ehr.kopsoft.cn:82/
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;
标签:同步控制 lis 集中 alt 利用 最大 改进 空闲 算法
原文地址:https://blog.51cto.com/4097978/2518142