|
이쁜이 님이 쓰신 글 :
: TreeView를 사용하는데 좀 어려운 난관에 부딪쳐서 글을 씁니다.
: DB에 저장되어 있는 Data의 Level에 따라 Menu No에 해당되는 내용이 Sub Item으로 TreeView에 나오게 하려는데 잘 안되네요.
: 예를 들어.
: DB의 Data가
: ----------------------------------- + 10 Action
: Menu No | Menu Title | Level |- Sixty Seconds
: ----------------------------------- |- Metrix
: 10 | Action | 0 + 20 Comedy
: 20 | Comedy | 0 Treeview 에서는 |- Dum & Dummer
: 30 | Drama | 0 =============> - 30 Drama
: 10 | Sixty Seconds | 1
: 10 | Metrix | 1
: 20 | Dum & Dummer | 1
: -----------------------------------
: 고수님들 부탁합니다.
: 참고로
: Text = Query->FieldByName("Menu_Title")->AsString;
: TreeView1->Items->Add(TreeView1->Selected, Text);
: 이렇게 기술했더니 Level에 관계없이 모두 TreeView의 첫레벨에 나타나요. (당연하겠지만)
:
임펠리테리입니다.
1차원적인 디비의 데이터로 2차원적인 트리를 구성하려니 복잡하시죠? 일단... 이쁜이님이 설계하신 테이블 레이아웃 대로라면 제대로 트리를 구성할 수가 없겠네요. 레벨만이 중요한 것이 아니라, 어떤 차일드 노드가 어느 패어런트 노드 밑에 있는가를 저장해둬야 하지요?
그러려면, 물론 몇가지 방법이 있겠습니다만, 일단 제가 금방 생각한 방법으로는, 테이블에 parent 필드를 추가한 후 모든 노드 레코드마다 패어런트 노드의 번호를 기억하고 있는 것이 좋겠네요. 그리고 최상위 노드들은 parent를 0으로 한다든지 하면 되겠구요.
디비에 저장하실 때는, 먼저 최상위 노드들부터 주루룩 저장한 후, 각 레벨 순으로 차일드들을 저장하면 되겠구요. 디비에서 읽어들일 때는 역시 최상위노드들 부터 주루룩 읽어서 트리뷰에 추가한 다음, 각 레벨별로 parent를 따라서 서브노드로 추가하면 되겠구요.
그럼 참고하시길...
|