Q&A

  • TreeView에 구현에 대한 질문
^^ 넘 초보라서요..  조언을 부탁드립니다..꾸뻑!
DB에 자료가 3개의 필드로 들어가있어요..

01 - 0 - 00
01 - 1 - 00
01 - 1 - 01
01 - 1 - 02
01 - 2 - 00
01 - 2 - 01
02 - 0 - 00
02 - 1 - 00
...

이것을 TreeView에
------------
01
    1
        1
        2
    2
        1
02
    1
------------
이렇게 나타내고 싶은데요..
쿼리문 날려서 not eof될때까지...해서
01 - 1 - 02 을 추가한후 01 - 2 - 00을 넣을려고
상위 Node로 TreeView.Selected를 올리고 싶거든요..
어떻게 하면 되는지 ㅋㅋ
한수 부탁드립니다.....^^?
2  COMMENTS
  • Profile
    KDDG_BaSTaD 2003.03.07 13:18

    ==> 노드 Depth를 보면 01 - 1 - 02 에서 01 이 1, 1 이 2, 02 가 2 이죠.
    요렇게 하시면 되겠네요..

    procedure TForm1.Button1Click(Sender: TObject);

      function GetTreeNode(AParent: TTreeNode; AText: String;
      ACreateIfNotExists: Boolean = False): TTreeNode;
      var
        Node: TTreeNode;
      begin
        Result := nil;

        if AParent <> nil then
          Node := AParent.getFirstChild
        else
          Node := Treeview.Items.GetFirstNode;

        while Node <> nil do
        begin
          if Node.Text = AText then
          begin
            Result := Node;
            Break;
          end;
          Node := Node.getNextSibling;
        end;

        if ACreateIfNotExists and (Result = nil) then
          Result := Treeview.Items.AddChild(AParent, AText);
      end;

      function CreateTreeNode(AF1, AF2, AF3: String): TTreeNode;
      begin
        Result := GetTreeNode(nil, AF1, True);
        Assert(Result <> nil, 'Check1');

        Result := GetTreeNode(Result, AF2, True);
        Assert(Result <> nil, 'Check2');

        Result := GetTreeNode(Result, AF3, True);
        Assert(Result <> nil, 'Check3');
      end;

    begin
      with CreateTreeNode(Edit1.Text, Edit2.Text, Edit3.Text) do
        Selected := True;
    end;
  • Profile
    전문성 2003.03.07 19:41
    감사합니다..
    그런데 AddObject나 AddChildObject를 사용할껀데요..
    대상 Object는 record의 포인트 입니다...

    ==================
    procedure TForm1.Button1Click(Sender: TObject);
    var
       sSQL, sGuCD, sGubun, sCode : String;
       TND : TTreeNode;
    begin
       sSQL := 'select * from sfm002f ' +
               'where GbCD < ''80'' ' +
               'order by GbCD, Gubun, Code ';
       with Query1, TreeView1 do begin
          sql.Text := sSQL;
          Open;
          First;
          while not eof do begin
             New(Wichi);
             Wichi^.GbCd := Fields[0].AsString;
             Wichi^.Gubun := Fields[1].AsString;
             Wichi^.Code := Fields[2].AsString;
             Wichi^.Name := Fields[3].AsString;

             //CreateTreeNode(TreeView1, Wichi);
        ->     if sGuCD <> Wichi^.GbCd then begin
        ->        Selected := Items.AddObject(TopItem, Wichi^.Name, Wichi);
        ->     end;

             sGuCD := Wichi^.GbCd;
             sGubun := Wichi^.Gubun;
             sCode := Wichi^.Code;

             Next;
          end;
       end;
    end;
    ==================

    -> 표 부분이 안되는데요..부탁드립니다...  죄송합니다.