Q&A

  • 벌써 헤메인지 이틀... 소스보아주세요. [TreeView]
데이터베이스를 읽어서 트리뷰에 나타내는 작업입니다.

그런데 이상하게 부모노드는 제대로 만들어지는데 그부모노드에 해당되는

하위노드들은 어뚱한 곳에 들어가 있읍니다.

도대체 어떻게 된건지 헤메고 있습니다.





영화 ------ 파이널판타지

음악 ------ 바하

스포츠 ---- 박찬호

뉴스 ------ 한겨레



위와같이 들어가야 정상인데



영화 ------ 파이널판타지 ----- 바하

음악 ------ 박찬호

스포츠----- 하위노드없음

뉴스 ----- 하위노드없음



이렇게 되버립니다.



childnode:=MainForm.Treeview2.Items.AddChild(node, MainForm.CategolyTable1.FIeldByName('SiteName').asString);

이 부분을 아래와같이하면 확실한데 Treenode 형식에 String형을

대입한다고 델파이가 야단이라서....

TreeView에 대해서 아시는분께서 답변 부탁드리겟습니다.



childnode:=MainForm.Treeview2.Items.AddChild(MainForm.CategolyTable1.FIeldByName('SiteName').asString , MainForm.CategolyTable1.FIeldByName('SiteName').asString);











////////////////////////////////////////////////////////////////////////////////

Procedure TreeViewCreat_2;

var str : String; i,findindex:Integer; node,node2,childnode : TTreeNode;

begin

CategolyStrList:=TStringList.Create;

SiteStrList:=TStringList.Create;

mainform.Treeview2.Items.Clear;

findindex:=0;



if MainForm.CategolyTable1.RecordCount <> 0 then

begin

MainForm.CategolyTable1.First;

while not MainForm.CategolyTable1.EOF do

begin

if Length(MainForm.CategolyTable1.FIeldByName('SiteName').asString) = 0 then

begin

node := MainForm.Treeview2.Items.Add(nil, MainForm.CategolyTable1.FIeldByName('Categoly').asString);

node.ImageIndex:=0;

node.selectedIndex:=1;

CategolyStrList.Add(MainForm.CategolyTable1.FIeldByName('Categoly').asString);

end;



if Length(MainForm.CategolyTable1.FIeldByName('SiteName').asString) <> 0 then

begin

findindex:=CategolyStrList.IndexOf(MainForm.CategolyTable1.FIeldByName('Categoly').asString);

if findindex > -1 then

begin

//node := MainForm.Treeview2.Items [ findindex ]; //<-------이인덱스값이 잘못들어간것같기도하고....

node := CategolyStrList[ findindex ];

childnode:=MainForm.Treeview2.Items.AddChild(node, MainForm.CategolyTable1.FIeldByName('SiteName').asString);

SiteStrList.Add(MainForm.CategolyTable1.FIeldByName('SiteName').asString);

childnode.ImageIndex:=2;

childnode.selectedIndex:=3;

end;

end;



MainForm.CategolyTable1.Next;

end;

end;

end;

1  COMMENTS
  • Profile
    신호성 2001.08.02 19:37
    일단 설명하신 글로보아 Categoly는 0레벨에만 존재하는 것으로 보여집니다.

    작성하신 소스는 부모노드를 얻기위해 StringList에 부모노드의 문자열을 기록

    하였다가 index값을 이용하였는데 index값은 TreeView에 Node가 추가중인 경우에

    변하기 때문에 정확하지 않습니다.



    일단 작성하신 소스로보아 Categoly의 문자열은 중복되지 않는다는 전제하에

    부모노드를 찾아 자식노드로 등록하는 방법으로 소스를 변경해 보았습니다.





    부모노드를 찾는 함수



    function GetParentNode(Categoly : String) : TTreeNode;

    var

    TempNode : TTreeNode;

    begin

    Result := nil;

    with MainForm.Treeview2 do

    begin

    TempNode := Items.GetFirstNode;

    While TempNode <> nil do

    begin

    if (TempNode.Text = Categoly) then

    begin

    Result := TempNode;

    Break;

    end;

    TempNode := TempNode.GetNextSibling; // 같은단계(0단계)의 다음노드 얻기

    end;

    end;

    end;







    자식노드를 추가하는 소스의 변경 (TStringList 는 사용할 필요가 없음)



    if Length(MainForm.CategolyTable1.FIeldByName('SiteName').asString) <> 0 then

    begin

    node := GetParentNode(MainForm.CategolyTable1.FIeldByName('Categoly').asString); // 부모노드 얻기



    if (node <> nil) then

    begin

    childnode:=MainForm.Treeview2.Items.AddChild(node, MainForm.CategolyTable1.FIeldByName('SiteName').asString); // 자식노드 추가

    // SiteStrList.Add(MainForm.CategolyTable1.FIeldByName('SiteName').asString);

    childnode.ImageIndex:=2;

    childnode.selectedIndex:=3;

    end;

    end;





    컴파일 해보지 않아 문법 에러가 있을 수도 있습니다.