노드를 Open할때 바로 밑의 자식노드 데이타를 가져와서 add하세요
이런 wrote:
> 현재 조직도 데이터를 읽어 와서 트리뷰로 조직도를
> 구성하는 프로그램을 작성중인데.. 문제가 있어서 질문을 드립니다.
>
> 프로그램 구동은 잘 되나, 데이터 개수가 500개 이상일 경우에는
> 너무 느리군요.. 아래와 같이 불규칙한 조직도 데이터가 있을경우
> 트리뷰로 나타내야 합니다.
>
> --------------
> 데이터 형식
> --------------
> 우리회사,전자계산소,개발부,홍길동
> 우리회사,전자계산소,개발부,김말똥
> 우리회사,전자계산소,개발부,유지보수팀,황정은
> 우리회사,전자계산소,개발부,유지보수팀,김정말
> 우리회사,제주지점,이상은
> 우리회사,제주지점,김동한
>
> 우리회사
> 전자계산소
> 개발부
> 홍길동
> 김말똥
> 유지보수팀
> 황정은
> 김정말
> 제주지점
> 이상은
> 김동한
>
>
> 제가 만들었던 샘플프로그램을 올려드립니다.
> 왜 데이터가 조금 많을 경우에는 느릴까요?
> 아시는분의 조언 부탁드립니다.
>
>
> procedure TForm1.AnalyClick(Sender: TObject);
> var
> MainNode, FindedNode, DestNode: TTreeNode;
> num, Dnum : Integer;
> StrList : TStringList;
> begin
> TreeView.Items.Clear;
> MainNode:= TreeView.Items.add(nil, '조직 구성도');
> StrList := TStringList.Create;
> TreeView.Items.BeginUpdate;
>
> for num :=0 to Memo.Lines.count -1 do
> begin
> StrList.CommaText := Memo.Lines.Strings[num];
> DestNode:= MainNode;
>
> for Dnum :=0 to StrList.Count -1 do
> if FindNode(StrList.Strings[Dnum], FindedNode, DestNode) then
> if Dnum = StrList.Count -1 then {마지막 항목이라면 무조건 추가}
> TreeView.Items.AddChild(DestNode, StrList.Strings[Dnum])
> else
> DestNode := FindedNode
> else
> DestNode := TreeView.Items.AddChild(DestNode, StrList.Strings[Dnum]);
>
> Label1.Caption := inttostr(num) + ' ' +inttostr(Memo.Lines.count-1);
> application.ProcessMessages;
> end;
>
> TreeView.Items.EndUpdate;
> StrList.Free;
> // TreeView.FullExpand;
> end;
>
> //------------------------------------------------------------//
> // 메인 폼의 트리뷰 아이템 검색 루틴
> //------------------------------------------------------------//
> Function TForm1.FindNode( Str : String ; var FindNname, Origin :TTreeNode): Boolean;
> var
> DestNode: TTreeNode;
> Levels: integer;
> begin
> DestNode := Origin;
> Levels := DestNode.Level;
>
> while DestNode <> nil do
> begin
> DestNode := DestNode.GetNext;
> if DestNode = nil then Break;
> if Levels >= DestNode.Level then Break;
> if Levels = DestNode.Level-1 then
> if Str = DestNode.Text then
> begin
> FindNname := DestNode;
> FindNode := True;
> exit;
> end;
> end;
>
> FindNode := False;
> end;
없을 정도로 빠릅니다...
제가 볼때는 프로그램 구조상의 문제는 없는거 같네요...
뭐 전체 트리를 검색할때가 문제가 된다면 트리형태의 자료구조를 하나 만드시면 되구요.
검색할때 트리뷰컴포넌트를 이용하는 것이 아니라 만들어진 트리형태의 자료구조를
이용하는 거죠...
탐색기 폴더트리가 이러한 형태입니다...
이런 wrote:
> 프로그램 구조상 조직도가 이미 트리뷰에
> 구성되어 있어야 합니다 -_-;
>
> 분명히 빠른 방법이 있을텐데...
> 아시는분?.. 글구 이 게시판에서는 파일 올리기가 안되네요
> 델마당 Q/A 에 제가 구현한 소스를 올려놓았습니다.
>
> 아시는분.. 답변좀 주세요~
>