2 maple892 maple892 于 2013.12.03 21:51 提问

MFC的CTreeView的树的遍历

我在 CTreeViewOnInitialUpdate() 函数中写的插入树节点的代码
CTreeCtrl & TCtrl = GetTreeCtrl();
TCtrl.ModifyStyle(0,TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);
HTREEITEM father = TCtrl.InsertItem(_T("日常消费"));
m_HTree[0] = TCtrl.InsertItem(_T("2011-9-2"),father);
m_HTree[1] = TCtrl.InsertItem(_T("2011-1-1"),father);
m_HTree[2] = TCtrl.InsertItem(_T("2010-2-1"),father);

m_ado.OnInitODBC();//用的是数据库提取数据作为插入节点
CString sql;
sql.Format(_T("select * from TALLYCAT"));
m_pRecordset = m_ado.GetRecordset(_bstr_t(sql));//记录指针指向第1条记录
while(!m_pRecordset->adoEOF)
{
     **GetData()** ;
    if (m_date == "2010-2-1")
                 {
        if(TCtrl.ItemHasChildren(m_HTree[2]))//有子节点
        {               
        HTREEITEM brother = TCtrl.GetChildItem(m_HTree[2]);//得到父项的首个孩子的句柄
         **Search** (brother,m_HTree[2]);//遍历之后的兄弟节点  
        }
        else{TCtrl.InsertItem(m_type,m_HTree[2]);//插入首                       个孩子节点}
    }
    m_pRecordset->MoveNext();

}
Search 函数是这样的
void CTallyCatTreeView::Search(HTREEITEM brother,HTREEITEM father)
{
CTreeCtrl & TCtrl = GetTreeCtrl();
HTREEITEM bro = TCtrl.GetNextSiblingItem(brother);//得到下一个兄弟的句柄
if(bro != NULL)
{

CString str = TCtrl.GetItemText(bro);
if (!strcmp(m_type,str))
{

TCtrl.InsertItem(m_type,father);
}
else{Search(bro,father);}
}else{
TCtrl.InsertItem(m_type,father);
}
}

数据库是这样的
NUM NAME TYPE MONEY DATE
006 电冰箱 电器 2000 2010-2-1
007 电热毯 电器 200 2010-2-1
008 西红柿 食物 8 2010-2-1

GetData()函数主要是把数据库的数据付给CTreeView的成员变量
void CTallyCatTreeView::GetData(void)
{
m_date = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("DATE");
m_type = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("TYPE");
}
最后的显示是
2010-2-1的子节点分别是电器,电器,食物
但是我不想它重复阿,请帮帮我!
主要问题应该是search函数

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!