急问:VC++(MFC)里怎样用树控件显示数据表数据,共三级。控件是TreeView

急问:VC++(MFC)里怎样用树控件显示数据表数据,共三级。控件是TreeView,第1张

可以利用C++ map 对象保存一个ID和HTREEITEM 的映射,伪代码如下

#include <map>

using namespace std

声明一个保存映射的全局或局部map 成员。

map<int, HTREEITEM>_maps

添加列表伪代码

_RecordsetPtr rs

rs.CreateInstance() ....

rs->Open(....)// 读取TB_JCU

循环变量recordset 对象,并插入树形列表

rs->MoveFirst()

while(!rs->EOF) {

int id = rs->Fileds->GetItem("id").Value

HTREEITEM hItem = tree.InsertItem(....) // 插入校区。

// 关键部分

_maps.insert(std::pair<int, HTREEITEM>(id, hItem))

rs->movenext()

}

下面插入第二张表

rs->open(....)读取TB_Profession

遍历recordset

while(!rs->EOF)

{

取father, id 两个字段

int father = rs->Fields->GetItem["father"].value

int id = rs->Fields->GetItem["id"].value

取需要插入的father HTREEITEM

HTREEITEM hFather = _maps[fahter]

插入HTREEITEM

HTREEITEM hItem = tree.InsertItem(.....)// 设定父HTRRITEM 为 hFather

// 然后将新添加的HTREEITEM 添加到map 对象

_maps[id] = hItem

}

以类似的方式将第三章表插入到树形控件

跟正常的树一样,比如前序遍历

bool CMy1Dlg::preorder(HTREEITEM t)

{

if(t)

{

UpdateData(true)

m_show+=c_tree.GetItemText(t)

m_show+=_T(",")

UpdateData(false)

if(preorder(c_tree.GetNextSiblingItem(t)))

{

if(preorder(c_tree.GetChildItem(t)))

{

return true

}

}

return false

}

else

{

return true

}

}

void CMy1Dlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

m_show=_T("")

UpdateData(false)

preorder(c_tree.GetRootItem())

}

其中c_tree是树控件的变量,m_show是一个编辑框的CString变量,用来输出遍历的结果,preorder这个函数放在对话框类的中

这里的OnBnClickedButton2这个按钮事件是用来触发遍历的

如果需要源程序的话留个邮箱发给你


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6691919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存