对于DataGrid设置DataSource的问题?
我想要动态的指定要使用要用那个Ado,试了好多方法都不行,大家帮帮忙. 问题点数:20、回复次数:7Top
1 楼lfchen(一条晚起的虫--床上用品[家纺]专卖)回复于 2006-06-02 08:43:05 得分 0
m_pCon.CreateInstance("ADODB.Connection");
m_pCon->PutCursorLocation(adUseClient); //
m_pCon->Open()
m_datagrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_datagrid.ReBind();Top
2 楼kelelipeng(kelelipeng)回复于 2006-06-02 11:16:15 得分 0
在一个对话框中放了一个DataGrid和ADO分别与m_datagrid和m_adodc绑定
以下是InitDialog中的部分代码
////设置ado数据源信息:
m_adodc.SetConnectionString("Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=ts_xt;Data Source=LP");
m_adodc.SetCommandType(1);
m_adodc.SetRecordSource("Select * from Books") ;
m_adodc.Refresh();
}
我是想如何用动态的方法使m_datagrid指向这个Ado?
因为没有SetDataSource()事件,初学者大家能否写详细点,问题没有想的那么复杂.
Top
3 楼whutcl8110(whut)回复于 2006-06-02 14:32:03 得分 0
借宝地
再问两个问题
1.
m_pRecordset->CursorLocation = adUseClient;
m_DataGridCtrl.SetRefDataSource(NULL);
m_DataGridCtrl.SetRefDataSource((LPUNKNOWN) m_pRecordset);
为什么加m_pRecordset->CursorLocation = adUseClient;
这句是什么意思?
不加这句,弹出错误“The rowset is not bookmakable!”
2.
在绑定数据源后
m_pConnection->Close();关闭连接后,DataGrid的数据空了,不知道为什么?
Top
4 楼syy64(太平洋)回复于 2006-06-02 15:23:35 得分 0
BOOL CDlgRecordset::QueryRecord()
{
_CommandPtr cmd;
_RecordsetPtr rs;
_ConnectionPtr conn;
_variant_t vra;
VARIANT *vt1 = NULL;
try
{
/* cmd.CreateInstance( __uuidof(Command));
rs.CreateInstance(__uuidof(Recordset));
conn.CreateInstance(__uuidof(Connection));*/
UpdateData(TRUE);
theApp.m_pConnection->PutCursorLocation(adUseClient);
/* conn->CursorLocation = adUseClient;
conn->Open(_bstr_t( theApp.m_pConnection.GetInterfacePtr() ), L"", L"", -1);
cmd->ActiveConnection = conn;
cmd->CommandText = (_bstr_t) m_strQuery;
cmd->CommandType = adCmdText;
rs = cmd->Execute(&vra,vt1, adCmdText);*/
/*rs->PutRefActiveConnection(theApp.m_pConnection);
rs->Open((_bstr_t)m_strQuery,
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);*/
/// ((CTestDllApp*)(&theApp))->m_pConnection
/// m_pRecordset.CreateInstance(__uuidof(Recordset));
/* m_pRecordset->Open((_bstr_t)m_strQuery,
_variant_t((IDispatch*)theApp.m_pConnection, TRUE),
adOpenStatic,
adLockOptimistic,
adCmdText);*/
if(m_pRecordset->State==1)
{
m_pRecordset->Close();
}
m_pRecordset->Open((_bstr_t)m_strQuery,
theApp.m_pConnection.GetInterfacePtr(),//»ñÈ¡¿â½Ó¿âµÄIDispatchÖ¸Õë
adOpenStatic,
adLockOptimistic,
adCmdText);
/* m_DataGrid.SetRefDataSource(NULL);
m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_DataGrid.Refresh();*/
}
catch (_com_error &e)
{
::MessageBox(NULL,e.Description(),"Ìáʾ",MB_OK);
}
m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_DataGrid.Refresh();
UpdateData(FALSE);
//m_pRecordset->Close();
return true;
}
Top
5 楼jbczj(人见人爱)回复于 2006-06-03 17:51:05 得分 0
在vc里面用数据库控件,不如用c++b or delphiTop
6 楼kelelipeng(kelelipeng)回复于 2006-06-12 10:18:10 得分 0
我解决了Top
7 楼shellworld(shellworld)回复于 2006-11-16 10:54:27 得分 0
回复人:whutcl8110(whut) ( 一级(初级)) 信誉:100 2006-6-2 14:32:04 得分:0
?
1. m_pRecordset->CursorLocation = adUseClient
把从数据库取到的记录集放在你本地缓冲区,这是你用datagrid是必须这么设置。
2. 你的datasource都没有了,可能datagrid自动做了清空。Top




