zoukankan      html  css  js  c++  java
  • VS2010环境下MFC使用DataGrid绑定数据源

    如果MFC的软件中 使用DataGrid控件后,在别的电脑上不能运行行,需要拷贝一个 MSDATGRD.ocx
    和msstdfmt.dll  文件在软件的目录中,并写一个批处理文件
    reg.dat
    文件内容如下
    regsvr32 msdatgrd.ocx
    regsvr32 msstdfmt.dll
     

    详细介绍如何在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:WindowsSystem32MSDATGRD.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 filescommon filessystemadomsado15.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

  • 相关阅读:
    ios-app提交审核问题总结
    mui混合app请求过程处理(缓存、加载、刷新机制)
    vue引入assets和static静态资源问题
    mui入门教程
    scroll.js
    jQuery.Running.js
    CSS 编码技巧
    textillate.js
    3. 戏说VHDL之入门游戏一:流水灯
    2. 流水灯小计
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/5125364.html
Copyright © 2011-2022 走看看