TREEVIEW에서
-서울특별시
--송파구
--강동구
-부산광역시
--북구
--남구
이런식으로 값을 넣고 싶습니다. 먼저 폼이 호출할 때는 델파이 툴에서 '서울특별시','부산광역시'등은 미리 값을 넣고 컴파일하기 때문에 아무 문제없이 값을 가지고 와서 집어넣을 수 있습니다.
그런데 다시 검색을 할때 TREEVIEW.FREE를 하고 먼저 '서울틀별시','부산광역시'등을 먼저 제가 만들고 나서 값을 검색하여 집어넣고자 합니다.
'서울특별시','부산광역시'같은 것을 어떻게 만들죠????
벌서 1주일을 소비하고 있습니다.
> TREEVIEW에서
> -서울특별시
> --송파구
> --강동구
> -부산광역시
> --북구
> --남구
>
> 이런식으로 값을 넣고 싶습니다. 먼저 폼이 호출할 때는 델파이 툴에서 '서울특별시','부산광역시'등은 미리 값을 넣고 컴파일하기 때문에 아무 문제없이 값을 가지고 와서 집어넣을 수 있습니다.
>
> 그런데 다시 검색을 할때 TREEVIEW.FREE를 하고 먼저 '서울틀별시','부산광역시'등을 먼저 제가 만들고 나서 값을 검색하여 집어넣고자 합니다.
> '서울특별시','부산광역시'같은 것을 어떻게 만들죠????
>
> 벌서 1주일을 소비하고 있습니다.
제가 전에 DB 자료를 트리뷰 형식으로 나타내 볼려구 고생한 적이 있어서 남의일 같지만은 않네요 ^^;;
소스가 허덥하고 주석이 없지만 제 나름대로 델파이 헬프와 사이트 뒤져가면서 간신히(억지로 껴 맞추듯이^^;) 만든 거예요.
부모 노드에서 자식노드-자식노드-자식노드 까지 입니다.
아직두 왜 일케 데는지를 모릅니다. --;
그럼, 즐코~
procedure TfrmTree.FormShow(Sender: TObject);
var
SysNode, SubNode, MinorNode, ProNode : TTreenode ;
tmp_system_id, tmp_sub_system_id, tmp_minor_system_id : string;
i,j,inc_count : integer;
next_tree : boolean;
begin
next_tree := false;
i := 0; j:=0;
TV.Items.Clear;
inc_count:=2;
while not frmMenuInput.Qry.Eof do // while 1
begin
if next_tree then
begin
if (frmMenuInput.QrySub.RecordCount=0) then
inc_count:=1;
else
j := j+frmMenuInput.QrySub.RecordCount
+ frmMenuInput.QryMinor.RecordCount
+ frmMenuInput.QryPro.RecordCount
+inc_count;
i := j;
end;
tmp_system_id := frmMenuInput.Qry.FieldByName('system_id').AsString;
TV.Items.AddChild(SysNode,frmMenuInput.Qry.FieldByName('system_name').AsString);
with frmMenuInput.QrySub do
begin
close;
Sql.Clear;
Sql.Add('Select system_id, sub_system_id, sub_system_name from tsubsystem ');
Sql.Add('Where system_id = :system_id');
Sql.Add('Order by system_id, sub_system_id');
Prepare;
ParamByName('system_id').asinteger := strtoint(tmp_system_id);
open;
end;
// frmMenuInput.QrySub.First;
while not frmMenuInput.QrySub.Eof do // while 2
begin
tmp_sub_system_id := frmMenuInput.QrySub.FieldByName('sub_system_id').AsString;
subNode := TV.Items[0+j];
TV.items.AddChild(subNode, frmMenuInput.QrySub.FieldByName('sub_system_name').AsString);
with frmMenuInput.QryMinor do
begin
close;
Sql.Clear;
Sql.Add('Select system_id, sub_system_id, minor_system_id, minor_system_name from tminorsystem ');
Sql.Add('Where system_id = :system_id and sub_system_id = :sub_system_id');
Sql.Add('Order by system_id, sub_system_id, minor_system_id');
Prepare;
ParamByName('system_id').asinteger := strtoint(tmp_system_id);
ParamByName('sub_system_id').asinteger := strtoint(tmp_sub_system_id);
open;
end;
while not frmMenuInput.QryMinor.Eof do // while 2
begin
tmp_minor_system_id := frmMenuInput.QryMinor.FieldByName('minor_system_id').AsString;
MinorNode := TV.items[i+1];
TV.Items.AddChild(MinorNode, frmMenuInput.QryMinor.FieldByName('minor_system_name').AsString);
with frmMenuInput.QryPro do
begin
close;
Sql.Clear;
Sql.Add('Select system_id, sub_system_id, minor_system_id, program_id, program_name from tprogram ');
Sql.Add('Where system_id = :system_id and sub_system_id = :sub_system_id and minor_system_id = :minor_system_id');
Sql.Add('Order by system_id, sub_system_id, minor_system_id, program_id');
Prepare;
ParamByName('system_id').asinteger := strtoint(tmp_system_id);
ParamByName('sub_system_id').asinteger := strtoint(tmp_sub_system_id);
ParamByName('minor_system_id').asinteger := strtoint(tmp_minor_system_id);
open;
end;
while not frmMenuInput.QryPro.Eof do
begin
proNode := TV.items[i+2];
TV.items.AddChild(proNode, frmMenuInput.QryPro.FieldByName('program_name').AsString);
frmMenuInput.QryPro.Next;
end;
frmMenuInput.QryMinor.Next;
end; // end of minor_system 3
frmMenuInput.QrySub.Next;
end; // end of sub_system 2
inc(i);
next_tree := true;
frmMenuInput.Qry.Next;
end; // end of system 1
edit1.SetFocus;
end;