VS2010环境下MFC使用DataGrid绑定数据源
詳細介紹如何在MFC中使用DataGrid控件實現數據綁定。
1:新建一個MFC應用程序:DataGridDemo
2:選擇基于對話框,然后一直下一步,直到完成。
?
3:為了簡單,清除多于的東西。
?
4:現在要插入一個DataGrid控件,前提是你已經將控件添加到工具箱了。
VS2010默認沒有這個控件。添加辦法如下:
在工具欄空白處右鍵,選中選擇項,彈出一個選擇工具項的對話框,選中“COM組件”選 項卡
點擊“選擇”按鈕,因為我是win7 64位的系統,所以路徑為SysWOW64,如果為32位請找system32。如下圖:
?
5:選擇MSDATGRD.OCX。選擇后,確定。工具箱中應該有了DataGrid控件了。
?
6:現在要注冊這個組件。
這一步非常重要!
需要下載文件:MSDATGRD.OCX
下載地址:http://download.csdn.net/detail/shijiufeng/3198530
注冊方法:命令行? regsvr32.exe C:\Windows\System32\MSDATGRD.OCX
注意:如果出現"can not initialize data binding“的錯誤,則還需要注冊MSSTDFMT.DLL文件
7:成功注冊后現在就來添加DataGrid控件了。
? ? ?在DataGridDemo界面右鍵選擇:"插入Acitve控件"然后選擇DataGrid,或者直接從工具箱上拖上來。
?
8:將DataGrid的ID和Caption的屬性修改為IDC_DATAGRID_TEST ?如圖:
?
9:關鍵的一步:在解決方案上右鍵,添加-類-ActiveX控件中的MFC類
?
10:點擊“添加”按鈕后在選擇“文件”找到剛才的控件的位置,這里選擇Column和Columns兩個接口,其它的也可以選擇,但是不要選擇IDataGrid接口:
因為IDataGrid接口選擇后生成的類CDataGrid繼承的是COleDispatchDriver類,我們需要的是CDataGrid繼承CWnd類。
至于類CDataGrid的文件CDataGrid.h我們想其它辦法解決。
?
11:我們從另外的地方將DataGrid.h、DataGrid.cpp復制到項目中。
? ? ? ?其它 的設置如在DataGridDemoDlg.h : 頭文件中添加引用與代碼
// DataGridDemoDlg.h : 頭文件#include "DataGrid.h"#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")CDataGrid m_dbTest;//數據庫連接與數據集ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;?
? 在?DataGridDemoDlg.cpp : 實現文件中添加引用與代碼
#include "CColumn.h" #include "CColumns0.h" #include "DataGrid.h"// TODO: 在此添加額外的初始化代碼 //------初始化數據庫------// //AfxOleInit(); m_pConnection.CreateInstance("ADODB.Connection"); //------------------------// try {m_pConnection->ConnectionTimeout = 8;m_pConnection->PutCursorLocation(adUseClient);m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\DataBase\\LoginDemo.accdb;","","",adModeUnknown); } catch(_com_error e) {AfxMessageBox("數據庫連接失敗");return FALSE; } //---------初始化記錄集對象---------------// try {m_pRecordset.CreateInstance("ADODB.Recordset"); //打開記錄集m_pRecordset->Open("SELECT * FROM BALANCE",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); } catch(_com_error e)///捕捉異常 {CString temp;temp.Format("aaa連接數據庫錯誤信息:%s",e.ErrorMessage());AfxMessageBox(temp);return 0; }m_dbTest.SetRefDataSource(NULL); m_dbTest.SetRefDataSource((LPUNKNOWN)m_pRecordset);m_dbTest.Refresh();//另外要注意如下方法內紅色部分。void CData_Disp2Dlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DDX_Control(pDX,IDC_DATAGRID_TEST,m_dbTest); }?
?
最后結果如下:
?
12:可能出錯的地方:
m_dbTest.SetRefDataSource(NULL);?
m_dbTest.SetRefDataSource((LPUNKNOWN)m_pRecordset);
如果用生成的CDataGrid.h,里面的方法為putref_DataSource
DDX_Control(pDX,IDC_DATAGRID_TEST,m_dbTest); 這句話可能也會報錯,
因為VS2010生成的類CDataGrid繼承的是COleDispatchDriver類,我們需要的是CDataGrid繼承CWnd類。
所以最好還是用其它地方的DataGrid.h和DataGrid.cpp文件來替換Vs2010生成的。
最后提供這個例子的代碼下載:
在我的下載資源里面:http://download.csdn.net/detail/fddqfddq/4505306
總結
以上是生活随笔為你收集整理的VS2010环境下MFC使用DataGrid绑定数据源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS属性传值传递不过去
- 下一篇: 关于android的几个小知识点