Q&A

  • 트리뷰와DB를연결해서 이름으로 나타내고자 할때....
안녕하십니까..!!^^

제목이 이상했습니다...!! 무슨말인지..^^

다름이 아니오라...!!



DB를 읽어와 TreeView에 나타내려고 합니다..!!

물론 트리뷰와DB를연결한간단한예제를 통해 구현이 가능했구요..!!

거기서 좀더 응용을 하려 하니 딱 막혀서..!!

송구 스럽게도 아시 글을 올립니다..!!

고수님들의 넓은 마음으로 받아주시기 바랍니다..!!^^



서두가 너무 길었던것 같습니다...!!그럼..본론으로 들어가겠습니다..!!



DB구조는 아래와 같습니다...

PCOD NAME SCOD

---------------------------

101 A 0

102 B 0

1001 C 101

1002 D 102

10001 E 1001



부모노드와 자식 노드를 비교하여...

결과가 이렇게 나왔습니다..



101

1001

10001



102

1002



정상적으로 나왔읍니다..!!

근데 이렇게 말구..Name으로 나타내려 합니다..!!

A

C

E



B

D

이렇게요..!!

한번 아니 여러번 반복하고 또 해도..잘안되네요..!!

SCOD 와 PCOD를 비교해서 NAME의 값을 불러 나타내고 싶습니다..!!

비교를 어떻게 해야 하는지...고수님의 의견 부탁드리겠습니다..



참고로..트리뷰와DB를연결한간단한예제를 참조해서 작업하고 있습니다...

2  COMMENTS
  • Profile
    이대선 2001.11.29 21:42
    its wrote:

    > 안녕하십니까..!!^^

    > 제목이 이상했습니다...!! 무슨말인지..^^

    > 다름이 아니오라...!!

    >

    > DB를 읽어와 TreeView에 나타내려고 합니다..!!

    > 물론 트리뷰와DB를연결한간단한예제를 통해 구현이 가능했구요..!!

    > 거기서 좀더 응용을 하려 하니 딱 막혀서..!!

    > 송구 스럽게도 아시 글을 올립니다..!!

    > 고수님들의 넓은 마음으로 받아주시기 바랍니다..!!^^

    >

    > 서두가 너무 길었던것 같습니다...!!그럼..본론으로 들어가겠습니다..!!

    >

    > DB구조는 아래와 같습니다...

    > PCOD NAME SCOD

    > ---------------------------

    > 101 A 0

    > 102 B 0

    > 1001 C 101

    > 1002 D 102

    > 10001 E 1001

    >

    > 부모노드와 자식 노드를 비교하여...

    > 결과가 이렇게 나왔습니다..

    >

    > 101

    > 1001

    > 10001

    >

    > 102

    > 1002

    >

    > 정상적으로 나왔읍니다..!!

    > 근데 이렇게 말구..Name으로 나타내려 합니다..!!

    > A

    > C

    > E

    >

    > B

    > D

    > 이렇게요..!!

    > 한번 아니 여러번 반복하고 또 해도..잘안되네요..!!

    > SCOD 와 PCOD를 비교해서 NAME의 값을 불러 나타내고 싶습니다..!!

    > 비교를 어떻게 해야 하는지...고수님의 의견 부탁드리겠습니다..

    >

    > 참고로..트리뷰와DB를연결한간단한예제를 참조해서 작업하고 있습니다...



    Treeview에 scod값을 넣지 말고 name값을 넣으시면 간단히 해결 될 문제 인거 같군여...



    만일 답변이 틀리다면 source를 올리시는 편이 낳을 듯 합니다.



    기럼 존 코딩하세요..^^

  • Profile
    its 2001.11.29 22:52
    ..^^ 님께서 소스를 요청(?) 이상타..^^ 소스입니다..!!

    지금 여기에는 Name 필드에 해당되는 내용이 없습니다..!!

    테스트 해보다해보다 못하고 그전 소스로 올립니다..!!^^ 무례함을 용서하옵소서..!!^^



    다시 필드를 구성한걸 보면..

    Pcod Name Scod

    ------------------------

    101 A 0

    102 B 0

    1001 C 101

    1002 D 102

    10001 E 1001



    대강 이런 내용이 db에 들어 있습니다..!!

    아래 내용소스로 컴파일해서 결과를 보면 아래와 같습니다..!!

    +101

    | +1001

    | +1003

    |

    +102

    +1002 이런식입니다...

    Pcod 별로 옆에 Name이 있습니다...그리고 옆 필드는 그러니까..Scod 필드

    Scod 필드의 내용이 '0' 이면 Root_Node 이고 '0'아닐때에는 리스트 뷰에

    뿌려주어서 거기서 자리로 Copy해 해당 되는 Node 밑에 붙는 내용입니다.

    그러나 위 결과물 처럼 아래 소스로는 나오는데..그결과 그러니까..위내용을

    Name에 맞게 뿌려주고 싶습니다..예를 들면..아래와 같이..

    +A

    | +C

    | +E

    +B

    +D 이렇게 말입니다..!!

    한번 고수님께서 소스를 보시고 추가할곳이 있으면 가르침을 주십시요..!!

    그럼 고수님들의 의견(?) 을 기다리겠습니다...!!^^ 감사합니다..!!



    Procedure TForm1.RootRead;

    var

    Temp_Str1, Temp_Str2 : String;

    ItemCount, idx, i : Integer;

    Sub_Node : TTreeNode;

    begin

    ListBox1.Clear;

    TreeView1.Items.Clear;



    With Query1 do

    begin

    if Active then

    Close;

    Sql.Clear;

    Sql.Add('Select * from RelayInfo ');

    Open;

    While (not Eof) do

    begin

    Temp_Str1 := FieldByName('Scod').AsString;

    Temp_Str2 := FieldByName('Pcod').AsString;



    if Temp_Str1 = '0' then

    begin

    TreeView1.Items.Add(nil, Temp_Str2);

    end

    else

    begin

    ListBox1.Items.Add(Temp_Str1 + '-' + Temp_Str2);

    end;

    Next;

    end;

    Close;

    end;



    // 서브아이템 등록...

    idx := 0;

    ItemCount := ListBox1.Items.Count;

    While ListBox1.Items.Count > 0 do

    begin

    Inc(idx);

    Temp_Str1 := ListBox1.Items.Strings[idx-1];

    Temp_Str2 := Copy(Temp_Str1,Pos('-',Temp_Str1)+1, Length(Temp_Str1));

    Temp_Str1 := Copy(Temp_Str1,1,Pos('-',Temp_Str1)-1);



    Root_Node := nil;

    for i := 0 to TreeView1.Items.Count-1 do

    begin

    if Temp_Str1 = TreeView1.Items.Item[i].Text then

    begin

    Root_node := TreeView1.Items.Item[i];

    end;

    end;



    if Root_Node <> nil then

    begin

    if TreeView1.Items.AddChild(Root_Node, Temp_Str2) <> nil then

    begin

    ListBox1.Items.Delete(idx-1);

    Dec(idx);

    end;

    end;



    if ListBox1.Items.Count <= idx then

    begin

    if ItemCount = ListBox1.Items.Count then

    Break;

    ItemCount := ListBox1.Items.Count;

    idx := 0

    end;

    end;



    end;