자작소스/C++/MFC/API
DB에서 그룹을 읽어 CTreeView 로 뿌리기
와이즈번
2008. 12. 20. 01:30
액세스로 간단히 구성해 봤는데 테이블은 이미지와 같다.
id 는 PK 이고 div_id 는 부모의 id 값이고 is_last_node 는 말단 노드인지 표시하는 필드다.
소스코드는 아래와 같다.
CTreeView::OnInitialUpdate();
//이미지 리스트 생성
CImageList il;
il.Create(IDB_BITMAP1, 16, 1, RGB(255, 255, 255));
//이미지 리스트 설정
CTreeCtrl& tree = GetTreeCtrl();
tree.SetImageList(&il, TVSIL_NORMAL);
il.Detach();
CTreeCtrl& tree = GetTreeCtrl();
tree.SetImageList(&il, TVSIL_NORMAL);
il.Detach();
//1레벨 초기화
HTREEITEM hGrp = tree.InsertItem("대학교", 0, 0, TVI_ROOT, TVI_LAST);
CString csId;
csId.LoadString(IDS_DB_DSN);
CDatabase db;
db.OpenEx(csId,0);
CRecordset rs(&db);
rs.Open(CRecordset::dynaset, "SELECT COUNT(*) FROM tbl_group");
rs.GetFieldValue(short(0),csId);
rs.Close();
if(csId.Compare("0") != 0) {
int cnt,cnt1;
cnt = _ttoi(csId);
HTREEITEM* hGrp1 = new HTREEITEM[cnt];
rs.Open(CRecordset::dynaset, "SELECT * FROM tbl_group ORDER BY div_id ASC");
CString csName,csDivId,csNextDivId;
while(!rs.IsEOF()) {
rs.GetFieldValue(short(0),csId);
rs.GetFieldValue(short(1),csName);
rs.GetFieldValue(short(2),csDivId);
rs.GetFieldValue(short(3),csNextDivId);
HTREEITEM hGrp = tree.InsertItem("대학교", 0, 0, TVI_ROOT, TVI_LAST);
CString csId;
csId.LoadString(IDS_DB_DSN);
CDatabase db;
db.OpenEx(csId,0);
CRecordset rs(&db);
rs.Open(CRecordset::dynaset, "SELECT COUNT(*) FROM tbl_group");
rs.GetFieldValue(short(0),csId);
rs.Close();
if(csId.Compare("0") != 0) {
int cnt,cnt1;
cnt = _ttoi(csId);
HTREEITEM* hGrp1 = new HTREEITEM[cnt];
rs.Open(CRecordset::dynaset, "SELECT * FROM tbl_group ORDER BY div_id ASC");
CString csName,csDivId,csNextDivId;
while(!rs.IsEOF()) {
rs.GetFieldValue(short(0),csId);
rs.GetFieldValue(short(1),csName);
rs.GetFieldValue(short(2),csDivId);
rs.GetFieldValue(short(3),csNextDivId);
cnt = _ttoi(csDivId);
cnt1 = _ttoi(csId);
if(csDivId.Compare("0") == 0 && csNextDivId.Compare("0") == 0)
hGrp1[--cnt1] = tree.InsertItem(csName, 1, 1, hGrp, TVI_LAST);
else if(csDivId.Compare("0") == 0 && csNextDivId.Compare("0") != 0)
hGrp1[--cnt1] = tree.InsertItem(csName, 2, 2, hGrp, TVI_LAST);
else if(csNextDivId.Compare("0") == 0)
hGrp1[--cnt1] = tree.InsertItem(csName, 1, 1, hGrp1[--cnt], TVI_LAST);
else
hGrp1[--cnt1] = tree.InsertItem(csName, 2, 2, hGrp1[--cnt], TVI_LAST);
rs.MoveNext();
}
rs.Close();
delete [] hGrp1;
}
db.Close();
출력화면