안녕하십니까..고수님들..
다름이 아니오라..현재 DB에서 데이타를 읽어와 TreeView에 뿌려주는 작업을 하고 있습니다..그러니까 부모 - 아들 - 손자 ..뭐 이런식이죠..!!
지금 DB구조는 아래와 같이 예를 들어 작성하였습니다..
Tel | Name | TelType | UpperTel
a A1 0
b A2 0
c A11 1 a
d A21 1 b
e A111 2 c
여기서 DB구조에 필드 타입을 보면
Tel : CHAR , Name : CHAR , TelType : TINYINT , UpperTel : CHAR
위와 같이 구성되어 있습니다..!!
설명을 간략히 드리자면 TelType에 해당하는 0 : 부모
1 : 자식
2 : 손자
뭐 이런식으로 구성합니다.
TreeView에 디스플레이 시키려고 하는 값은..?아래와 같이
---- a
| |-- c
| |-- e
|
|--- b
|-- d
이렇게 디스플레이 시키려고 합니다...!!^^
아래는 소스코드입니다..한번 확인해보시고 두루 가르침을 주십시요..^^
procedure TForm1.FormShow(Sender: TObject);
var
mRecCnt,mCnt,mCntRR,mInnerCnt : Integer;
strUpperTel : String;
nodRR1, nodIR1, nodTmp : TTreeNode;
begin
mCntRR := 0;
mInnerCnt := 0;
strUpperTel := '';
with CastDataModule.TelInfoQry do
begin
Active := True;
First;
for mCnt := 1 to mRecCnt do
begin
// 부모의 추가..
if (FieldByName('TelType').AsInteger = 0) then
begin
nodRR1 := Tree_of_Relay.Items.AddFirst(nil, FieldByName('Tel').AsString);
end;
----------------> 여기 까지 부모는 올바르게 찾아 TreeView에 보여집니다..
// 자식의 추가..
if (FieldByName('TelType').AsInteger = 1) then
begin
strUpperTel := FieldByName('UpperTel').AsString;
First;
for mInnerCnt:= 1 to mCnt -1 do
begin
if (strUpperIP = FieldByName('RelayIP').AsString) then
begin
MoveBy(mCnt-1);
nodIR1 := Tree_of_Relay.Items.AddChild(nodRR1, FieldByName('RelayName').AsString +
' [' + FieldByName('RelayIP').AsString + ' ]');
------------------> 위에 내용으로 하면 자식Node가 생기긴 하는데 자기 부모를 찾아가지 못합니다..!!위와 같이 하면 결과는
--- b
|--- c ---> 이런 식으로 생깁니다...
제가 원하는 답은 --- b --- a
| |--- | |--- c
| 이거나 |
|-- a |-- b
|--- c |--> 이거 거든요..^^
아직 손자 나타내는 데까지는 작성안해서 자식폼까지만의 결과물을 올려 놓았습니다...
위 내용을 어떻게 하면 원하는 결과물을 얻을수 있을까요..!!
부탁드리겠습니다...^^ 간절히..
아래에 나와 있는내용은 GatNode 라는 함수를 써서 쓴 것인데...
사용 할줄을 잘모르겠네요..!!
아울러 밑에 GetNode 에 대한 설명도 부탁드리겠습니다...^^
제 말이 좀 ..이상한가요..^^ 너그럽게 얘교로 마주세요..^^
요새 안개가 많이 끼더군요..!! 차조심 하시구요...^^ 감기두...
// nodTmp := Tree_of_Relay.Items.GetNode( HTreeItem ( strUpperIP ) );
// ShowMessage(nodRR1.Text);
// nodIR1 := Tree_of_Relay.Items.AddChild(nodTmp, FieldByName('RelayName').AsString);
// break;
end;
next;
end;
end;
Next;
end;
end;
end;
///////////////////////////////////////////////////////////////
열심히. wrote:
> 안녕하십니까..고수님들..
> 다름이 아니오라..현재 DB에서 데이타를 읽어와 TreeView에 뿌려주는 작업을 하고 있습니다..그러니까 부모 - 아들 - 손자 ..뭐 이런식이죠..!!
> 지금 DB구조는 아래와 같이 예를 들어 작성하였습니다..
>
> Tel | Name | TelType | UpperTel
> a A1 0
> b A2 0
> c A11 1 a
> d A21 1 b
> e A111 2 c
>
>
> 여기서 DB구조에 필드 타입을 보면
>
> Tel : CHAR , Name : CHAR , TelType : TINYINT , UpperTel : CHAR
>
> 위와 같이 구성되어 있습니다..!!
> 설명을 간략히 드리자면 TelType에 해당하는 0 : 부모
> 1 : 자식
> 2 : 손자
> 뭐 이런식으로 구성합니다.
>
> TreeView에 디스플레이 시키려고 하는 값은..?아래와 같이
>
> ---- a
> | |-- c
> | |-- e
> |
> |--- b
> |-- d
>
> 이렇게 디스플레이 시키려고 합니다...!!^^
> 아래는 소스코드입니다..한번 확인해보시고 두루 가르침을 주십시요..^^
>
> procedure TForm1.FormShow(Sender: TObject);
> var
> mRecCnt,mCnt,mCntRR,mInnerCnt : Integer;
> strUpperTel : String;
> nodRR1, nodIR1, nodTmp : TTreeNode;
> begin
> mCntRR := 0;
> mInnerCnt := 0;
> strUpperTel := '';
>
> with CastDataModule.TelInfoQry do
> begin
> Active := True;
>
> First;
> for mCnt := 1 to mRecCnt do
> begin
> // 부모의 추가..
> if (FieldByName('TelType').AsInteger = 0) then
> begin
> nodRR1 := Tree_of_Relay.Items.AddFirst(nil, FieldByName('Tel').AsString);
> end;
> ----------------> 여기 까지 부모는 올바르게 찾아 TreeView에 보여집니다..
>
> // 자식의 추가..
> if (FieldByName('TelType').AsInteger = 1) then
> begin
> strUpperTel := FieldByName('UpperTel').AsString;
>
> First;
> for mInnerCnt:= 1 to mCnt -1 do
> begin
> if (strUpperIP = FieldByName('RelayIP').AsString) then
> begin
> MoveBy(mCnt-1);
> nodIR1 := Tree_of_Relay.Items.AddChild(nodRR1, FieldByName('RelayName').AsString +
> ' [' + FieldByName('RelayIP').AsString + ' ]');
>
> ------------------> 위에 내용으로 하면 자식Node가 생기긴 하는데 자기 부모를 찾아가지 못합니다..!!위와 같이 하면 결과는
>
> --- b
> |--- c ---> 이런 식으로 생깁니다...
>
> 제가 원하는 답은 --- b --- a
> | |--- | |--- c
> | 이거나 |
> |-- a |-- b
> |--- c |--> 이거 거든요..^^
> 아직 손자 나타내는 데까지는 작성안해서 자식폼까지만의 결과물을 올려 놓았습니다...
> 위 내용을 어떻게 하면 원하는 결과물을 얻을수 있을까요..!!
> 부탁드리겠습니다...^^ 간절히..
>
> 아래에 나와 있는내용은 GatNode 라는 함수를 써서 쓴 것인데...
> 사용 할줄을 잘모르겠네요..!!
> 아울러 밑에 GetNode 에 대한 설명도 부탁드리겠습니다...^^
> 제 말이 좀 ..이상한가요..^^ 너그럽게 얘교로 마주세요..^^
> 요새 안개가 많이 끼더군요..!! 차조심 하시구요...^^ 감기두...
>
>
>
> // nodTmp := Tree_of_Relay.Items.GetNode( HTreeItem ( strUpperIP ) );
> // ShowMessage(nodRR1.Text);
> // nodIR1 := Tree_of_Relay.Items.AddChild(nodTmp, FieldByName('RelayName').AsString);
> // break;
> end;
> next;
> end;
>
> end;
>
> Next;
> end;
> end;
>
> end;
>