CColumns columns=m_grid.GetColumns();
VARIANT ss;
ss.vt=0;<---------改为::
CColumn col=columns.GetItem((const VARIANT)ss);
col.SetText("终端ID");
一切OK!
CColumns columns=m_grid.GetColumns();
VARIANT ss;
ss.vt=1;<---------改为1;则同样出错???WHY???!!
CColumn col=columns.GetItem((const VARIANT)ss);
col.SetText("终端ID");

解决方案 »

  1.   

    ss.vt表示当前VARIANT数据类型,0表示VT_EMPTY, 1表示VT_NULL,...(MSDN about VARIANT)
    如果你不设置vt,当然或有类型不匹配。设置为VT_EMPTY没出错那是你走运。严格来说vt应该设置为VT_I4或VT_I2(datagrid可能在类型上有多种支持,只要是数字或EMPTY);你好像不太清楚怎么用VARIANT.
    其实如果你用COleVariant的话会比较方便.建议你好好读一读MSDN关于VARIANT和COleVariant的介绍.
      

  2.   

    谢谢!!
    我老大给我详细的讲了一下!
    高手毕竟是高手!义语中的!!
    叫个朋友?!
    我的MAIL: [email protected]
      

  3.   

    TO:WJF:
    您老兄发一段SOURCE ,操纵MSADO和data grid 控件的!
    我很急!!!(人有三急...._);
    VB是不用写任何代码,若ADD,DELETE,UPDATE ,直接recordset.add,delete,refresh,就可以!我想在用ODBC联接INTERBASE,想1)将表头改为中文(基本解决);2)然后实现ADD,DELETE,etc.(1)可是我现在出现"E_FALSE"的错误,(2)其次我不知道怎样捕获错误,?
    (3)我将adoctrl m_ado,dbgrid m_grid,Crecordset m_table,它们之间的关系我迷糊,我希望您能给讲讲!!
    多谢了!!
    30分奉上!!
      

  4.   

    ah,我手头有一个别人的程序,就是大了点。mail你一份吧。用ODBC吗,
    1.ado的connectstring设置为ODBC数据源(like: DSN=yourdb),recordsource设置为一条sql语句(like: select * from yourtable)
    2.datagrid的Datasource设置为ado的窗口ID(like: IDC_YOURADOCTRL1)
    3.datagrid在操作数据库时(add,update,delete)会有事件通知你
    4.一般用不上CRecordset.因为datagrid+adoctrl自己会操作数据库,你要做的只不过是验证
      一些你自己的条件
    5.捕捉错误吗?adocrtl好像有个error事件
    6.接下来看你自己了....