DataGrid方法标注
在VS2010中無(wú)法增加了CColumn和Ccolumns類(lèi)
解決方案,方案名->右擊->添加類(lèi)->ActiveX控件中的MFC類(lèi)->添加彈出了“從ActiveX控件添加類(lèi)向?qū)?#xff0c;然后選擇”文件“->位置處填寫(xiě)你所添加的控件的.Ocx文件(C:\WINDOWS\system32\MSDATGRD.OCX),在這里我只是添加了CColumn 和CColumns 兩個(gè)類(lèi)。
?
注意:用這種方法添加的Ccolumn和Ccolumns類(lèi),不僅函數(shù)名會(huì)改變,而且在運(yùn)用的時(shí)候會(huì)出現(xiàn)各種問(wèn)題,連最基本的Ccolumns cols=m_grid.GetItem(ColeVariant(long(0)));編譯都不能通過(guò),更是由于很多函數(shù)名的更改,造成很多困難。所以,我們可以先在VC++6.0中添加Microsoft DataGrid Control Version 6.0(OLEDB)控件,IDE會(huì)自動(dòng)給我們添加所需要的函數(shù),將添加后的Ccolumn和Ccolumns的頭文件和源文件,復(fù)制到我們VS2008工程目錄下,將它們添加到工程中,就可以正常使用了,而且編譯也不會(huì)出任何問(wèn)題!
二、在DLG視圖上,右擊,選中:插入ActiveX控件,選擇:Microsoft DataGridControl Version 6.0(OLEDB),然后將此Grid控件關(guān)聯(lián)一個(gè)控件變量m_dataGrid
三、初始化MS控件(即微軟件的軟件)
在CdlgApp類(lèi)中的initInstance()中加入:
[cpp]?view plaincopy四、引入ADO控件
1、導(dǎo)入庫(kù)文件
使用ADO前必須在工程的stdafx.h文件最后用直接引入符號(hào)#import引入ADO庫(kù)文件,以使編譯器能正確編譯。代碼如下:
[cpp]?view plaincopyADO類(lèi)的定義是作為一種資源存儲(chǔ)在ADO DLL(msado15.dll)中,在其內(nèi)部稱(chēng)為類(lèi)型庫(kù)。
類(lèi)型庫(kù)描述了自治接口,以及C++使用的COM vtable接口。
當(dāng)使用#import指令時(shí),在運(yùn)行時(shí)Visual C++需要從ADO DLL中讀取這個(gè)類(lèi)型庫(kù),
并以此創(chuàng)建一組C++頭文件。這些頭文件具有.tli 和.tlh擴(kuò)展名,#import引入ADO庫(kù)文件的代碼編譯后,在項(xiàng)目的目錄下生成了這兩個(gè)文件。在C++程序代碼中調(diào)用的ADO類(lèi)要在這些文件中定義。
程序的第三行指示ADO對(duì)象不使用名稱(chēng)空間,在有些應(yīng)用程序中,由于應(yīng)用程序中的對(duì)象與ADO中的對(duì)象之間可能會(huì)出現(xiàn)命名沖突,所以有必要使用名稱(chēng)空間。如果要使用名稱(chēng)空間,則可把第三行程序修改為: rename_namespace("AdoNS")。第四行代碼將ADO中的EOF(文件結(jié)束)更名為adoEOF,因?yàn)槲募慕Y(jié)尾也是以EOF結(jié)尾的,是為了避免與定義了自己的EOF的其他庫(kù)沖突。 至于改為什么名字,可以根據(jù)自己的命名習(xí)慣自己確定。
如何出現(xiàn)編譯錯(cuò)誤,可能是軟件沒(méi)能注冊(cè)成功的原因,可以手動(dòng)在? 開(kāi)始->運(yùn)行中 寫(xiě):regsvr32? (msado15.dll的地址,可以直接裝msado15.dll拖到運(yùn)行框中,將會(huì)自動(dòng)出現(xiàn)它的地址)??
2、初始化COM環(huán)境
OLE DB 是基于COM技術(shù)編寫(xiě)的,ADO是OLE DB基礎(chǔ)之上的用戶程序,
OLE DB是一個(gè)COM組件,在訪問(wèn)COM組件的時(shí)候需要初始化COM庫(kù),方法如下:
(1)??::CoInitialize(NULL); //初始化OLE/COM庫(kù)環(huán)境
//對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)在上下代碼之間寫(xiě),下面第三步就應(yīng)該寫(xiě)在這里
::CoUninitialize();//既然初始化了環(huán)境,當(dāng)然一定要記得釋放他了
(2)也可以調(diào)用MFC全局函數(shù)
AfxOleInit();
五:三大ADO指針的創(chuàng)建、實(shí)例化和與DataGrid控件的關(guān)聯(lián)
[cpp]?view plaincopy//下面實(shí)現(xiàn)打開(kāi)連接
[cpp]?view plaincopy標(biāo)注:putref_DataSource((LPUNKNOWN)m_ptrRecordset);
1、這句代碼是將CrecordSet對(duì)象與我們的DataGrid控件連接起來(lái)的函數(shù),我看代碼查了好久才查到,在VC6.0中原為SetRefDataSource,不知道在VS2010中怎么就變成它了,隨便改接口函數(shù)真是害死人。
2、m_ptrRecordset->CursorLocation = adUseClient;
adUseClient是需要把數(shù)據(jù)傳輸?shù)奖镜?#xff0c;應(yīng)用舉例是斷開(kāi)數(shù)據(jù)庫(kù)進(jìn)行Recordset操作,即在內(nèi)存中操作,而不直接寫(xiě)入遠(yuǎn)端數(shù)據(jù)庫(kù),相反地有,adUseServer,是指直接在數(shù)據(jù)庫(kù)中進(jìn)行操作,下面這個(gè)例子在數(shù)據(jù)量大的時(shí)候,進(jìn)行Find操作,比adUseClient省了很多時(shí)間。
3。不用時(shí)關(guān)閉連接:m_ptrConnection->Close();??//在窗口銷(xiāo)毀時(shí),關(guān)閉與數(shù)據(jù)庫(kù)連接, 一般是在DestroyWindow()中實(shí)現(xiàn)
注意:我原想用ADO控件和DataGrid控件的結(jié)合的方法來(lái)實(shí)現(xiàn),但在DataGrid控件的屬性上設(shè)置DataSourceO 為ADO控件的ID時(shí),出現(xiàn)很多朋友出現(xiàn)的錯(cuò)誤:“該組件上的 GetValue 操作失敗,生成錯(cuò)誤代碼 0x80020003”查了很多資料都沒(méi)有辦法解決。
DataGrid函數(shù)
COleVariant()是VARIANT的封裝類(lèi),只是為了解決數(shù)據(jù)轉(zhuǎn)換問(wèn)題而設(shè)計(jì)的
m_grid.GetRow()返回用戶點(diǎn)擊的行號(hào)
m_grid.RowTop()返回指定行,頂部所在位置,如果是可見(jiàn)行,其值為負(fù)值
m_grid.GetRowHeight()返回行高
m_grid.SetText(s);?? 設(shè)置grid中的值
?
m_grid.put_row(m_grid.get_row());? ///以下三句,實(shí)現(xiàn),獲取當(dāng)前選中空格的數(shù)據(jù)
m_grid.put_col(m_grid.get_col());
CString str = m_grid. get_Text() ;獲得當(dāng)前焦點(diǎn)所在單元格數(shù)據(jù)。
如何給DATAGRID控件生成的列表添加序號(hào)
請(qǐng)參看我的另一篇文章:http://blog.csdn.net/harvic880925/article/details/7790980
總結(jié)
以上是生活随笔為你收集整理的DataGrid方法标注的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓开发-Activity中finish
- 下一篇: 数据库事务及锁机制介绍