实现了一种简洁的数据库转对方法,使用数组保存当前目录,通过计算代码长度来计算父节点,只需要对数据库进行一次查询,速度很快。数据库中代码为  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; |