http://www.cnblogs.com/panweishadow/archive/2013/07/25/3214629.html
参考: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
------------------------------
我按照如上方法操作之后 在添加控件的时候弹出对话框 "能实例化控件******,因为这需要设计时授权"
解决方法:摘自http://blog.csdn.net/drbinzhao/article/details/6667986
VS2008向工具箱中添加串口控件,步骤为工具——选择工具箱项,在出现的选择工具箱项窗体中选择COM组件勾选Microsoft Communications Control, version 6.0,点击确定,你的工具箱中就会出现一个小电话标识的控件,这个控件就是串口控件,
如果是初次使用,可能会遇到一个问题“未能实例化ActiveX控件 因为这需要设计时授权”。 控件时出现“未能实例化控件******,因为这需要设计时授权”,请拿 出VS.NET 2003的安装盘,在 \VisualStudio2003Inst\Extras\VB6 Controls目录下应该能找到vb6controls.reg这个文件,双击它,把这个信息 添加到注册表中去,就可以了 没有设计期授权,所以无法在设计器中使用,你需要一个授权文件。 如果你在打开对话框时弹出 "The ActiveX control "Grid Control" could not be instantiated because it requires a design-time license"这个对话框时,在VC安装盘中找到vb6controls.reg,双击导入注册表就OK了,没有这个文件的可以COPY下面的代码另存 为*.reg,导入注册表就行了 // Masked Edit Control 6.0 license key // Chart Control 6.0 (OLEDB) license key // Common Dialog Control 6.0 license key // ADO Data Control 6.0 (OLEDB) license key // Common Controls-3 6.0 license key // Windows Common Controls-2 5.0 (SP2) license key // Windows Common Controls license key // Data Bound Grid Control 5.0(SP3) license key // Data Bound List Controls 6.0 license key // Internet Transfer Control 6.0 license key // Multimedia Control 6.0 license key // Chart Control 6.0 license key // Windows Common Controls-2 6.0 license key // Windows Common Controls 6.0 license key // Comm Control 6.0 license key // DataGrid Control 6.0 (OLEDB) license key // DataList Control 6.0 (OLEDB) license key // DBWin license key // MSDBRPT license key // FlexGrid Control 6.0 license key // MAPI Controls 6.0 license key // MSRDO 2.0 license key // RemoteData Control 6.0 license key // Windowless Controls 6.0 license key // PictureClip Control 6.0 license key // Rich TextBox Control 6.0 license key // Sheridan Tab Control license key // SysInfo Control 6.0 license key // Winsock Control 6.0 license key |