实现了一种简洁的数据库转对方法,使用数组保存当前目录,通过计算代码长度来计算父节点,只需要对数据库进行一次查询,速度很快。数据库中代码为 001 001001 001002 002 这种样子。
procedure loadTree; var p: array of TTreeNode;//只用户保存当前的目录 node: TTreeNode;//当前节点 i: Integer; begin tv.Items.Clear; with tv, Items, qry do begin SQL.Text := 'select * from sys_department order by code'; Open; //最大保存16级 SetLength(p, 16); while not Eof do begin //计算当前代码级数,每一级三位长度 i := Trunc(Length(FieldByName('code').AsString) / 3); if i = 1 then begin p[0] := Items.Add(nil, FieldByName('title').AsString); node := p[0]; end else begin p[i - 1] := AddChild(p[i - 2], FieldByName('title').AsString); node := p[i - 1]; end; with node do begin Hint := FieldByName('title').AsString; Tag := FieldByName('id').AsInteger; Expanded := True; end; Next; end; end; end; |