工控编程吧

标题: 307上位机VC MFC使用ADO在树状控件上显示数据 [打印本页]

作者: qq263946146    时间: 2016-9-24 13:00
标题: 307上位机VC MFC使用ADO在树状控件上显示数据
ADO在树状控件显示数据
功能展示
树状控件可以很方便的显示有结构有组织的数据,使用显示的内容结构清晰一目了然,我们当前例程实现在ADO中利用树状控件显示数据,效果如图,例程运行时会初始化连接根目录数据库文件,并根据从表TreeItemTable读取的数据,增加树控件子项;

要点提示
树状控件子项的添加可以用其成员函数InsertItem实现,如我们例程中使用的代码m_ctrlTree.InsertItem( (LPCTSTR)(_bstr_t)(m_pTreeRecordset->GetCollect(“Class”)), hPartItem, NULL);参数1 为要插入的子项的名称,参数2为要插入的子项的父窗口句柄,参数3为要插入到的前面的子项的句柄,当然InsertItem()函数的形式众多,可以参阅MSDN手册查看更多信息

实现功能
1.新建基于对话框的应用程序
2.在STDAFX.H头文件中添加ADO的支持代码#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
3.在主对话框中准备一树状控件,关联变量CTreeCtrl m_ctrlTree;再准备一位图IDB_TreeBootImage作为树控件的子项图标
4.添加树控件的TVN_SELCHANGED, NM_CLICK消息响应函数
void CGkbc8Dlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
m_ctrlTree.SetItemImage(hTreeCurrent,0,true );//还原树型控件的图标
*pResult = 0;
}

void CGkbc8Dlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

hTreeCurrent=m_ctrlTree.GetSelectedItem ();
hTreeParent=m_ctrlTree.GetParentItem(m_ctrlTree.GetSelectedItem ());
m_ctrlTree.SetItemImage(hTreeCurrent,1,FALSE );//改变树型控件的图标
TreeCurrent="'"+m_ctrlTree.GetItemText(hTreeCurrent)+"'";
TreeParent=m_ctrlTree.GetItemText (hTreeParent);
//获取树中当前项及其子项的内容
hTreeCurrent=m_ctrlTree.GetSelectedItem ();

*pResult = 0;
}
5添加变量,ConnectionPtr m_pTreeConn; //连接创建
CImageList m_TreeBootImage;//Tree的图标
CString TreeCurrent,TreeParent;//当前和父级项文本内容
HTREEITEM hTreeCurrent,hTreeParent;//当前和父级项句柄
并在OnInitDialog函数中初始化
AfxOleInit();//初始化COM
/******************连接通讯录数据库********************/
HRESULT hr;
try
{
hr=m_pTreeConn.CreateInstance(_T("ADODB.Connection"));
m_pTreeConn->ConnectionTimeout = 10;
//连接ACCESS2000
hr=m_pTreeConn->Open(_bstr_t((LPCTSTR) _T("Provider=Microsoft.Jet.OLEDB.4.0;")
_T("Data Source=MyUniversity.mdb;")),
_T(""),_T(""),adModeUnknown);
}
catch(_com_error e)///捕捉异常
{
CString ErrorMessage;
ErrorMessage.Format(_T("连接数据库失败!\r\n错误信息是:%s"),e.ErrorMessage());
AfxMessageBox(ErrorMessage);///显示错误信息
return FALSE;
}
//<>
CreatTree(); //创建目录树
6.添加自定义函数void CreatTree(); void AddSubTree(CString strParent,CString strChild,HTREEITEM hPartItem); int SumRecordCount(CString strFieldValue); CString VariantToCString(VARIANT var); 函数的定义可参阅例程源码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/c5a0a71f661f50704d686a74f99a6b17/0/0/w_19rsuaubf9.swf-albumId=6384382009-tvId=6384382009-isPurchase=0-cnId=12[/iqiyi] (, 下载次数: 0)