求教怎么更新DataGrid
m_pRecordset->Open("SELECT * FROM info", m_pConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdUnknown); 
m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_pRecordset);//m_ctrlDG是CDataGrid控件变量
m_ctrlDG.Refresh();
为什么不能更新呢

解决方案 »

  1.   

    m_dataGrid.SetRefDataSource(NULL);
    m_dataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_dataGrid.Refresh();
      

  2.   

    m_dataGrid.SetRefDataSource(NULL);
    这句是重点,如果加上这句还不行,你看看m_pRecordset这个记录集是否取得到数据了,如果记录集有数据,就再在m_dataGrid.Refresh();这句下面加上这句:
    UpdateData(false);
      

  3.   

    加了那句也不行,现在的情况是我的更新函数为
    m_pRecordset->LockType=adLockBatchOptimistic;
    m_pRecordset->CursorLocation=adUseClient;
      m_pRecordset->Open("select * from info",(IDispatch *)m_pConnection, adOpenDynamic, adLockOptimistic, adCmdText); 
    m_ctrlDG.SetRefDataSource(NULL);
    m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_ctrlDG.Refresh();
    第一次可以更新成功,但第二次就会报错,应该是没有加m_pRecordset->Close()。但是我把这句加上后就又不能更新了,超级郁闷啊
      

  4.   

    我解决了,在这个函数里创建了_RecordsetPtr,而不是使用类的成员变量了,但是还是不能加Close函数,不知道会不会内存泄露哦,看看代码吧,有问题的话希望大家提出来啊:
    _RecordsetPtr m_pRecordset;
        m_pRecordset.CreateInstance(__uuidof(Recordset)); 
    //设置为更新模式
    m_pRecordset->LockType=adLockBatchOptimistic;
    m_pRecordset->CursorLocation=adUseClient;
    //更新DataGrid
      m_pRecordset->Open("select * from info",(IDispatch *)m_pConnection, adOpenDynamic, adLockOptimistic, adCmdText); 
    m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_ctrlDG.Refresh();
      

  5.   

    m_dataGrid.SetRefDataSource(NULL);
    m_dataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_dataGrid.Refresh();