VS2010 Win7 64位 C++ MFC DataGrid绑定实例
2016-07-08 00:41
507 查看
http://blog.csdn.net/fddqfddq/article/details/7874706
版权声明:本文为博主原创文章,未经博主允许不得转载。
纠结了几天的DataGrid绑定问题今天终于能跑出来了。我下载别人的代码,都可以跑,
因为我是用VS2010 Win7 64位 的环境来学习 C++ MFC的,网上找的资料大都是VC6.0正面的,
我下载的DataGrid例子都可以跑出来,一到我自己写就出错了。
后来我按照如下方法就可以了。文章最后有实例下载
1:新建一个MFC应用程序:DataGridDemo
![](http://my.csdn.net/uploads/201208/16/1345122612_8068.png)
2:选择基于对话框,然后一直下一步,直到完成。
![](http://my.csdn.net/uploads/201208/16/1345122635_8603.png)
3:为了简单,清除多于的东西。
![](http://my.csdn.net/uploads/201208/16/1345122650_6989.png)
4:现在要插入一个DataGrid控件,前提是你已经将控件添加到工具箱了。
VS2010默认没有这个控件。添加办法如下:
在工具栏空白处右键,选中选择项,弹出一个选择工具项的对话框,选中“COM组件”选 项卡
点击“选择”按钮,因为我是win7 64位的系统,所以路径为SysWOW64,如果为32位请找system32。如下图:
![](http://my.csdn.net/uploads/201208/16/1345122671_8559.png)
5:选择MSDATGRD.OCX。选择后,确定。工具箱中应该有了DataGrid控件了。
![](http://my.csdn.net/uploads/201208/16/1345122684_6734.png)
6:现在要注册这个组件。
请看我的另一篇文章:http://blog.csdn.net/fddqfddq/article/details/7866288
里面介绍了如何注册。
7:成功注册后现在就来添加DataGrid控件了。
在DataGridDemo界面右键选择:"插入Acitve控件"然后选择DataGrid,或者直接从工具箱上拖上来。
![](http://my.csdn.net/uploads/201208/16/1345122700_3984.png)
8:将DataGrid的ID和Caption的属性修改为IDC_DATAGRID_TEST 如图:
![](http://my.csdn.net/uploads/201208/16/1345122716_3506.png)
9:关键的一步:在解决方案上右键,添加-类-ActiveX控件中的MFC类
![](http://my.csdn.net/uploads/201208/16/1345122728_2034.png)
10:点击“添加”按钮后在选择“文件”找到刚才的控件的位置,这里选择Column和Columns两个接口,其它的也可以选择,但是不要选择IDataGrid接口:
因为IDataGrid接口选择后生成的类CDataGrid继承的是COleDispatchDriver类,我们需要的是CDataGrid继承CWnd类。
至于类CDataGrid的文件CDataGrid.h我们想其它办法解决。
![](http://my.csdn.net/uploads/201208/16/1345122741_5853.png)
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);
}
最后结果如下:
![](http://my.csdn.net/uploads/201208/16/1345122761_1633.png)
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/harvic880925/article/details/7674425
http://blog.csdn.net/fddqfddq/article/details/7874706
版权声明:本文为博主原创文章,未经博主允许不得转载。
纠结了几天的DataGrid绑定问题今天终于能跑出来了。我下载别人的代码,都可以跑,
因为我是用VS2010 Win7 64位 的环境来学习 C++ MFC的,网上找的资料大都是VC6.0正面的,
我下载的DataGrid例子都可以跑出来,一到我自己写就出错了。
后来我按照如下方法就可以了。文章最后有实例下载
1:新建一个MFC应用程序:DataGridDemo
![](http://my.csdn.net/uploads/201208/16/1345122612_8068.png)
2:选择基于对话框,然后一直下一步,直到完成。
![](http://my.csdn.net/uploads/201208/16/1345122635_8603.png)
3:为了简单,清除多于的东西。
![](http://my.csdn.net/uploads/201208/16/1345122650_6989.png)
4:现在要插入一个DataGrid控件,前提是你已经将控件添加到工具箱了。
VS2010默认没有这个控件。添加办法如下:
在工具栏空白处右键,选中选择项,弹出一个选择工具项的对话框,选中“COM组件”选 项卡
点击“选择”按钮,因为我是win7 64位的系统,所以路径为SysWOW64,如果为32位请找system32。如下图:
![](http://my.csdn.net/uploads/201208/16/1345122671_8559.png)
5:选择MSDATGRD.OCX。选择后,确定。工具箱中应该有了DataGrid控件了。
![](http://my.csdn.net/uploads/201208/16/1345122684_6734.png)
6:现在要注册这个组件。
请看我的另一篇文章:http://blog.csdn.net/fddqfddq/article/details/7866288
里面介绍了如何注册。
7:成功注册后现在就来添加DataGrid控件了。
在DataGridDemo界面右键选择:"插入Acitve控件"然后选择DataGrid,或者直接从工具箱上拖上来。
![](http://my.csdn.net/uploads/201208/16/1345122700_3984.png)
8:将DataGrid的ID和Caption的属性修改为IDC_DATAGRID_TEST 如图:
![](http://my.csdn.net/uploads/201208/16/1345122716_3506.png)
9:关键的一步:在解决方案上右键,添加-类-ActiveX控件中的MFC类
![](http://my.csdn.net/uploads/201208/16/1345122728_2034.png)
10:点击“添加”按钮后在选择“文件”找到刚才的控件的位置,这里选择Column和Columns两个接口,其它的也可以选择,但是不要选择IDataGrid接口:
因为IDataGrid接口选择后生成的类CDataGrid继承的是COleDispatchDriver类,我们需要的是CDataGrid继承CWnd类。
至于类CDataGrid的文件CDataGrid.h我们想其它办法解决。
![](http://my.csdn.net/uploads/201208/16/1345122741_5853.png)
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);
}
最后结果如下:
![](http://my.csdn.net/uploads/201208/16/1345122761_1633.png)
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/harvic880925/article/details/7674425
相关文章推荐
- C++ delete 和delete[] 的区别
- 再探C++Primer (5)const限定符
- 再探C++Primer(6) 标准库类型string、vector和迭代器
- OpenCV学习C++接口:图像遍历+像素压缩
- 一起talk C栗子吧(第一百七十三回:C语言实例--关闭终端中的缓冲功能一)
- C++ 最近面试题中遇到的一些问题
- 提高项目26.2-查成绩2
- 一个简单c语言windows程序的实现
- 查漏补缺——类(C++ Primer)
- C++ 读取 pcap文件
- 提高项目26.1-查成绩
- C语言中实现数组的动态增长
- 提高项目25.3选择排序
- C++sort函数的用法
- UVa1339(古老的密码)
- 【C++】实现的二叉搜索树BST
- C/C++框架和库
- C++traits技术的理解
- 【C语言】验证花括号成对出现
- Design Twitter