几个函数搞定:
void CErrorCheck::AddRootTree()
{
//创建图象标签
m_TreeBootImage.Create( IDB_BOOT,20,1,ILC_COLOR8);
m_ctrlTree.SetImageList ( &m_TreeBootImage,TVSIL_NORMAL );
m_ctrlTree.SetTextColor (RGB(7,145,13));
//Tree控件操作变量
TVINSERTSTRUCT tvInsert;
HTREEITEM hParentItem;
//
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
CString strSQL,strCurItem,strCity;
//
strSQL.Format("SELECT * FROM tbCity");
CADORecordset* pRs=new CADORecordset(((CInsuranceMISApp*)(AfxGetApp()))->pDB);
pRs->Open(strSQL,CADORecordset::openQuery);
if(pRs->GetRecordCount() > 0)
{
while(!pRs->IsEOF())
{
pRs->GetFieldValue("City",strCity);
//添加根目录
tvInsert.item.pszText = (LPSTR)(LPCTSTR)strCity;
hParentItem = m_ctrlTree.InsertItem(&tvInsert);
//添加子目录
AddSubTree(strCity,1,hParentItem);
pRs->MoveNext();
}
}
//展开Tree目录
m_ctrlTree.Expand(hParentItem,TVE_EXPAND);
}
//----------------------------------------------------
void CErrorCheck::AddSubTree(CString strCity, int nChildTreeLyr, HTREEITEM hItem)
{
//Tree控件操作变量
HTREEITEM hCurrentItem;
CString strSQL,strFarm,strTabName;
strTabName = SelectCityTable(strCity,TRUE);
strSQL.Format("SELECT Distinct ForestFarm FROM %s where City = '%s'",strTabName,strCity);
try
{
if(nChildTreeLyr > 0)
{
CADORecordset* pRs=new CADORecordset(((CInsuranceMISApp*)(AfxGetApp()))->pDB);
pRs->Open(strSQL,CADORecordset::openQuery);
if(pRs->GetRecordCount() > 0)
{
pRs->MoveFirst();
while(!pRs->IsEOF())
{
pRs->GetFieldValue("ForestFarm",strFarm);
hCurrentItem = m_ctrlTree.InsertItem(strFarm, hItem, NULL);
pRs->MoveNext();
}
}
}
}
catch(_com_error e)///捕捉异常
{
MessageBox("创建记录集失败!",strCity);
}
}
//-------------------------------------
void CErrorCheck::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
m_hTreeCurrent=m_ctrlTree.GetSelectedItem ();
m_hTreeParent=m_ctrlTree.GetParentItem(m_ctrlTree.GetSelectedItem ());
//树型控件的图标更改
m_ctrlTree.SetItemImage(m_hTreeCurrent,1,true );
m_strTreeCurrent="''"+m_ctrlTree.GetItemText(m_hTreeCurrent)+"''";
m_strTreeParent=m_ctrlTree.GetItemText (m_hTreeParent);
*pResult = 0;
}
void CErrorCheck::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
//-------------------树型控件的图标还原---------
m_ctrlTree.SetItemImage(m_hTreeCurrent,0,true );
//----------------------------------------------
*pResult = 0;
}
在CErrorCheck::OnInitDialog()中添加以下代码:
AddRootTree();
注:CErrorCheck是基于CDialog的对话框类。
成员变量:
CImageList m_TreeBootImage;程序启动时,对数据库进行读操作,从地州市表中查询地市州名,以地市州名各个创建树的根项目,再在另一表查寻符合条件的记录,并将单位名称一一添加到树中供数据查询用。
CString m_strTreeCurrent,m_strTreeParent;
HTREEITEM m_hTreeCurrent,m_hTreeParent;