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