还是关于DataGrid的问题,我浏览了很多的帖子,都没有解决这个问题,不如大家一起讨论一下!
下面是 jiaguiyun (龙翔九天) 发的帖子
做一个数据库,采用ADO,动态联接和产生纪录集后,尽管设置了数据源并调用了CDataGrid::refresh(),可是还是不能显示纪录。下面是测试用的代码,请大家帮忙看看。
编译通过,可以正常运行,纪录集也确实正常产生。
void CBoreholeView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ResizeParentToFit();
HRESULT hr;
_ConnectionPtr m_pConnection;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=stdreg.mdb","","",adModeUnknown);///连接数据库
}
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
// return FALSE;
}
CString strTableName("Course");
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open(_variant_t("SELECT * FROM Course"),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
TRACE("\n%d\n",m_pRecordset->GetRecordCount());
_variant_t vID,vTitle,vHours;
while(!m_pRecordset->adoEOF)
{
vID=m_pRecordset->GetCollect(_variant_t("CourseID"));
vTitle=m_pRecordset->GetCollect(_variant_t("CourseTitle"));
vHours=m_pRecordset->GetCollect(_variant_t("Hours"));
TRACE("%s ",(LPCTSTR)(_bstr_t)vID);
TRACE("%s ",(LPCTSTR)(_bstr_t)vTitle);
TRACE("%d\n",(INT)VHours);
m_pRecordset->MoveNext();
}
m_dataGrid.SetCaption("");
m_dataGrid.SetRefDataSource(NULL);
m_dataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_dataGrid.Refresh();
UpdateData(FALSE);
}
我也用这个方法做了,可以象 jiaguiyun (龙翔九天) 说的一样,不能显示