在VS2010中无法增加了CColumn和Ccolumns类

解决方案,方案名->右击->添加类->ActiveX控件中的MFC类->添加弹出了“从ActiveX控件添加类向导,然后选择”文件“->位置处填写你所添加的控件的.Ocx文件(C:\WINDOWS\system32\MSDATGRD.OCX),在这里我只是添加了CColumn 和CColumns 两个类。

注意:用这种方法添加的Ccolumn和Ccolumns类,不仅函数名会改变,而且在运用的时候会出现各种问题,连最基本的Ccolumns cols=m_grid.GetItem(ColeVariant(long(0)));编译都不能通过,更是由于很多函数名的更改,造成很多困难。所以,我们可以先在VC++6.0中添加Microsoft DataGrid Control Version 6.0(OLEDB)控件,IDE会自动给我们添加所需要的函数,将添加后的Ccolumn和Ccolumns的头文件和源文件,复制到我们VS2008工程目录下,将它们添加到工程中,就可以正常使用了,而且编译也不会出任何问题!

二、在DLG视图上,右击,选中:插入ActiveX控件,选择:Microsoft DataGridControl Version 6.0(OLEDB),然后将此Grid控件关联一个控件变量m_dataGrid

三、初始化MS控件(即微软件的软件)

在CdlgApp类中的initInstance()中加入:

  1. AfxEnableControlContainer();   //初始化MS控件

四、引入ADO控件

1、导入库文件

使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:

  1. #import "C:\Program Files\commonfiles\system\ado\msado15.dll" no_namespacerename("EOF","EndOfFile")rename("BOF","FirstOfFile")

ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。

类型库描述了自治接口,以及C++使用的COM vtable接口。

当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,

并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,#import引入ADO库文件的代码编译后,在项目的目录下生成了这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。

程序的第三行指示ADO对象不使用名称空间,在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。第四行代码将ADO中的EOF(文件结束)更名为adoEOF,因为文件的结尾也是以EOF结尾的,是为了避免与定义了自己的EOF的其他库冲突。 至于改为什么名字,可以根据自己的命名习惯自己确定。

如何出现编译错误,可能是软件没能注册成功的原因,可以手动在  开始->运行中 写:regsvr32  (msado15.dll的地址,可以直接装msado15.dll拖到运行框中,将会自动出现它的地址)

2、初始化COM环境

OLE DB 是基于COM技术编写的,ADO是OLE DB基础之上的用户程序,

OLE DB是一个COM组件,在访问COM组件的时候需要初始化COM库,方法如下:

(1)  ::CoInitialize(NULL); //初始化OLE/COM库环境

//对数据库的访问在上下代码之间写,下面第三步就应该写在这里

::CoUninitialize();//既然初始化了环境,当然一定要记得释放他了

(2)也可以调用MFC全局函数

AfxOleInit();

五:三大ADO指针的创建、实例化和与DataGrid控件的关联

  1. _ConnectionPtr pConnection;
  2. _RecordsetPtr pRecordset;
  3. _CommandPtr pCommand;
  4. pConnection.CreateInstance(__uuidof(Connection));
  5. pRecordset.CreateInstance(__uuidof(Recordset));
  6. pCommand.CreateInstance(__uuidof(Command));
  7. try{
  8. m_ptrConnection.CreateInstance(__uuidof(Connection));
  9. ASSERT(m_ptrConnection);  // 判断m_ptrConnection是否有效
  10. TCHAR currentDir[1024]={0};
  11. GetCurrentDirectory(1024,currentDir);
  12. CString connectStr;
  13. connectStr.Format(L"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s\\db2.mdb",currentDir);//我的数据库名为db2.mdb
  14. m_ptrConnection->ConnectionString=(_bstr_t)connectStr;
  15. if(m_ptrConnection->Open(_bstr_t(connectStr),"","",adConnectUnspecified) != S_OK)      //成功连接数据库
  16. {
  17. return false;
  18. }
  19. } catch(...)
  20. {
  21. CString str=L"连接数据库失败";
  22. AfxMessageBox(str);
  23. }

//////////////////下面实现打开连接////////////////

  1. m_ptrRecordset-> CursorLocation = adUseClient;   //非常重要,如果没有,则无法显示数据
  2. HRESULT hr = m_ptrRecordset->Open(_bstr_t(L"select* from Main"), _variant_t((IDispatch*)m_ptrConnection, TRUE),
  3. adOpenStatic,adLockBatchOptimistic, adCmdUnknown);
  4. m_dataGrid.putref_DataSource((LPUNKNOWN)m_ptrRecordset);
  5. m_dataGrid.Refresh();
  6. m_ptrConnection->Close();  //在窗口销毁时,关闭与数据库连接, 一般是在DestroyWindow()中实现

标注:putref_DataSource((LPUNKNOWN)m_ptrRecordset);

1、这句代码是将CrecordSet对象与我们的DataGrid控件连接起来的函数,我看代码查了好久才查到,在VC6.0中原为SetRefDataSource,不知道在VS2010中怎么就变成它了,随便改接口函数真是害死人。

2、m_ptrRecordset->CursorLocation = adUseClient;

adUseClient是需要把数据传输到本地,应用举例是断开数据库进行Recordset操作,即在内存中操作,而不直接写入远端数据库,相反地有,adUseServer,是指直接在数据库中进行操作,下面这个例子在数据量大的时候,进行Find操作,比adUseClient省了很多时间。

3。不用时关闭连接:m_ptrConnection->Close();  //在窗口销毁时,关闭与数据库连接, 一般是在DestroyWindow()中实现

注意:我原想用ADO控件和DataGrid控件的结合的方法来实现,但在DataGrid控件的属性上设置DataSourceO 为ADO控件的ID时,出现很多朋友出现的错误:“该组件上的 GetValue 操作失败,生成错误代码 0x80020003”查了很多资料都没有办法解决。

DataGrid函数

COleVariant()是VARIANT的封装类,只是为了解决数据转换问题而设计的

m_grid.GetRow()返回用户点击的行号

m_grid.RowTop()返回指定行,顶部所在位置,如果是可见行,其值为负值

m_grid.GetRowHeight()返回行高

m_grid.SetText(s);   设置grid中的值

m_grid.put_row(m_grid.get_row());  ///以下三句,实现,获取当前选中空格的数据
m_grid.put_col(m_grid.get_col());
CString str = m_grid. get_Text() ;获得当前焦点所在单元格数据。

如何给DATAGRID控件生成的列表添加序号

请参看我的另一篇文章:http://blog.csdn.net/harvic880925/article/details/7790980

DataGrid方法标注的更多相关文章

  1. 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法

    package charpter08; public class TestInterrupt01 { public static void main(String[] args) { Processo ...

  2. Datagrid方法扩展 - tooltip

    最新版本的jQuery Easyui新出来了一个组件叫tooltip,就是提示框.以前的版本没有这个组件的时候就有很多在问,datagrid的单元格,我要加鼠标提示要怎么做.原来我告诉他们的方法都是用 ...

  3. JEECG中datagrid方法自定义查询条件

    自定义加添加查询条件的用法: CriteriaQuery cq = new CriteriaQuery(EquipmentEntity.class, dataGrid); //查询条件组装器 org. ...

  4. easyUI 中datagrid 返回列隐藏方法

    easyui的datagrid方法返回的列,有的值不需要显示可以使用hidden(属性进行隐藏) columns : [ [{ field : 'bailClass', title : '类别', w ...

  5. 电容值E系列标称方法

    本节首先介绍常用的E系列标称方法,然后介绍电阻.电容器.电感器.二极管的分类.性能和识别方法,以及简单的实用电路. 一.E系列标称方法 厂家生产的电阻器,并不是包含任何阻值,就像人民币,只有1.2.5 ...

  6. 2 - Annotations标注

    下面是TestNG标注和参数的一个快速预览 @BeforeSuite 被标注的方法会在这个套件的所有测试执行之前执行  @AfterSuite 被标注的方法会在这个套件的所有测试执行之后执行 @Bef ...

  7. Swift之高德地图自定义标注弹出气泡样式

    在用到地图类的sdk,sdk自带的样式必定不能满足开发者的需求,于是开发者不得不进行自定义,由于官方同样是object-c 版语法,不得不将其转为swift语法,以满足项目需求. 新建两个类 Cust ...

  8. easyUI的datagrid控件日期列不能正确显示Json格式数据的解决方案

    EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正 ...

  9. 笔记:Hibernate 持久化类标注说明

    持久化类标注 标注 @Entity:注解声明该类是一个Hibernate的持久化类 标注 @Table:指定该类映射的表 参数 name:指定映射数据库表的名称 参数 uniqueConstraint ...

随机推荐

  1. 选择使用Spring框架的原因(Spring框架为企业级开发带来的好处有哪些)

  2. Javascript -- 示例:多选下拉选框

    1. 示例:多选下拉选框 <html> <head> <meta http-equiv="Content-Type" content="te ...

  3. TimeSpan 结构(struct)

    TimeSpan 是结构类型(struct),即值类型,可以通过两个DateTime(struct)之差来获得,如下例子: DateTime departure = new DateTime(2010 ...

  4. 【Demo】HTML5获取地理位置

    HTML5获取地理位置简单实例 实例1--获取地理位置的经纬度: <!DOCTYPE html> <html> <head>  <meta charset=& ...

  5. 后台操作日志,插入数据获取的该数据主键ID为null

    代码如下: @Override public void saveTopicResource(TopicResourceModel model, Integer userId) { TopicResou ...

  6. XML转Map

    public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, Doc ...

  7. 四十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)倒排索引

    倒排索引 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引 ...

  8. DDOS工具合集---CC 2.0(僵尸网络proxy,单一url,可设置cookie,refer),传奇克星(代理+单一url,可设置cookie),NetBot_Attacker网络僵尸1.0(僵尸网络,HTTP NO-Cache Get攻击模式,CC攻击,HTTP空GET请求攻击),傀儡僵尸VIP1.4版(僵尸网络,动态单一url)、上兴网络僵尸2.3、中国制造网络僵尸、安全基地网络僵尸==

    DDOS工具合集 from:https://blog.csdn.net/chinafe/article/details/74928587 CC 著名的DDOS CC工具,效果非常好!CC 2.0使用了 ...

  9. 【spark】常用转换操作:sortByKey()和sortBy()

    1.sortByKey() 功能: 返回一个根据键排序的RDD 示例 val list = List(("a",3),("b",2),("c" ...

  10. JavaScript 哈希表(散列表)实现和应用

    查找的效率与比较次数密切相关.基于比较的程序,运算效率是比较低的.比如平时可以通过indexOf查找一个数据.但这是一个基于比较的一个实现.如果是淘宝那样有上亿个商品,那么用indeOf 来查数据就会 ...