VS2010环境下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绑定数据源的更多相关文章
- libCURL开源库在VS2010环境下编译安装,配置详解
libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...
- VS2010环境下用ANSI C创建DLL和使用方法(转)
源:VS2010环境下用ANSI C创建DLL和使用方法 . 创建DLL工程 1.2 创建一个dll工程. 操作:a.文件->新建->项目->Win32控制台应用程序. b.输入工程 ...
- Boost学习总结(一)VS2010环境下编译STLport和Boost
Boost学习总结(一)VS2010环境下编译STLport和Boost Boost简介 Boost库是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库.1998年,Beman G.Da ...
- wpf中datagrid绑定数据源发生改变
1.若datagrid绑定的数据源是同一个的话,即使里面的数据不同.页面也不会刷新,则需要重置数据源,再绑定.处理如下: datagrid1.ItemsSource=ListModule; 若List ...
- Mybatis在非spring环境下配置文件中使用外部数据源(druidDatasource)
Spring环境下, MyBatis可以通过其本身的增强mybatis-spring提供的org.mybatis.spring.SqlSessionFactoryBean来注入第三方DataSourc ...
- VS2010环境下Winpcap配置方法 (转)
VS2010 配置Winpcap 新建一个项目,GetDevs.cpp.用来测试.测试代码最后有给出. View->Property Manager Debug|Win32 -> Mirc ...
- Win7+VS2010环境下CEGUI 0.8.4编译过程详解
转载▼ 1. 在http://cegui.org.uk/download 下载CEGUI源码包 cegui-0.8.4 以及CEGUI依赖库(Windows / Apple OS X only) ...
- VS2010环境下使用VB编写串口助手
1.在Form1的设计模式下添加以下控件: 2.添加好控件之后我们就可以打开Form1.vb进行编程了: '使用串口需要引用的命名空间 Imports System.IO.Ports Imports ...
- 如何在VS2010环境下编译C++程序
原文:http://blog.csdn.net/gupengnina/article/details/7441203 用 Visual Studio 编写 Visual C++ 程序的第一步是选择项目 ...
随机推荐
- LeetCode第[56]题(Java):Merge Intervals
题目:合并区间 难度:Medium 题目内容: Given a collection of intervals, merge all overlapping intervals. 翻译: 给定一个 ...
- selenium学习笔记(简单的元素定位)
收拾一下心情开始新的一周工作 继续是selenium的学习.配置成功后 由于所有操作都是建立在页面元素基础上的.所以下来就是学习定位元素 首先是基础的定位.就使用博客园首页搜索框为例: 下面是代码: ...
- PHP 环境搭建(win7+php5.6+apache或nginx)
安装介质 PHP5.6.16(php-5.6.16-Win32-VC11-x64.zip) Apache2.4.18(httpd-2.4.18-win64-VC14.zip) nginx (nginx ...
- MVC框架中的值提供机制(二)
在MVC框架中存在一些默认的值提供程序模板,这些值提供程序都是通过工厂模式类创建;在MVC框架中存在需要已Factory结尾的工厂类,在值提供程序中也存在ValueProviderFactories工 ...
- 内存保护机制及绕过方案——通过覆盖虚函数表绕过/GS机制
1 GS内存保护机制 1.1 GS工作原理 栈中的守护天使--GS,亦称作Stack Canary / Cookie,从VS2003起开始启用(也就说,GS机制是由编译器决定的,跟操作系统 ...
- Activity Process Task Application 专题讲解
Activity Process Task Application 专题讲解 Activity.和进程 为了阅读方便,将文档转成pdf http://files.cnblogs.com/franksu ...
- eclipse mars4.5安装hibernate开发环境
在安装hibernate插件过程中遇到下面前三张图片所示的现象是没关系的,只要最后能看到第四张图的结果就说明安装成功,我一开始不知道走了好多弯路.我用的eclipse mars4.5,采用了在线安装的 ...
- List列表按照对象进行排序
在某些业务场景下需要根据list列表中对象的字段进行排序.今天就以实例说明: 实体类 public class Product { private int discount; // 省略getter/ ...
- Leetcode 1019. Next Greater Node In Linked List
单调栈的应用. class Solution: def nextLargerNodes(self, head: ListNode) -> List[int]: stack = [] ret = ...
- windows C++ 全局异常捕捉函数
windows 核心编程中讲过 SEH 结构化异常处理 ::SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); LONG WINAPI M ...