VS2010 MFC DataGrid綁定實例


                   VS2010環境下MFC使用DataGrid綁定數據源

參考:http://blog.csdn.net/fddqfddq/article/details/7874706

詳細介紹如何在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM