日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataGrid方法标注

發(fā)布時間:2025/5/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataGrid方法标注 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在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
  • AfxEnableControlContainer();???//初始化MS控件??
  • 四、引入ADO控件

    1、導(dǎo)入庫文件

    使用ADO前必須在工程的stdafx.h文件最后用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下:

    [cpp]?view plaincopy
  • #import?"C:\Program?Files\commonfiles\system\ado\msado15.dll"?no_namespacerename("EOF","EndOfFile")rename("BOF","FirstOfFile")??
  • ADO類的定義是作為一種資源存儲在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
  • _ConnectionPtr?pConnection;??
  • ??
  • _RecordsetPtr?pRecordset;??
  • ??
  • _CommandPtr?pCommand;??
  • ??
  • pConnection.CreateInstance(__uuidof(Connection));??
  • ??
  • pRecordset.CreateInstance(__uuidof(Recordset));??
  • ??
  • pCommand.CreateInstance(__uuidof(Command));??
  • ??
  • try{??
  • ??
  • ?????????m_ptrConnection.CreateInstance(__uuidof(Connection));???
  • ??
  • ?????????ASSERT(m_ptrConnection);??//?判斷m_ptrConnection是否有效??
  • ??
  • ?????????TCHAR?currentDir[1024]={0};??
  • ??
  • ?????????GetCurrentDirectory(1024,currentDir);??
  • ??
  • ?????????CString?connectStr;??
  • ??
  • ?????????connectStr.Format(L"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s\\db2.mdb",currentDir);//我的數(shù)據(jù)庫名為db2.mdb??
  • ??
  • ?????????m_ptrConnection->ConnectionString=(_bstr_t)connectStr;??
  • ??
  • ?????????if(m_ptrConnection->Open(_bstr_t(connectStr),"","",adConnectUnspecified)?!=?S_OK)??????//成功連接數(shù)據(jù)庫??
  • ??
  • ?????????{??
  • ??
  • ??????????????return?false;??
  • ??
  • ?????????}??
  • ??
  • ?????}?catch(...)??
  • ??
  • ?????{??
  • ??
  • ?????????CString?str=L"連接數(shù)據(jù)庫失敗";??
  • ??
  • ?????????AfxMessageBox(str);??
  • ??
  • ?????}??
  • //下面實現(xiàn)打開連接

    [cpp]?view plaincopy
  • m_ptrRecordset->?CursorLocation?=?adUseClient;???//非常重要,如果沒有,則無法顯示數(shù)據(jù)??
  • ??
  • HRESULT?hr?=?m_ptrRecordset->Open(_bstr_t(L"select*?from?Main"),?_variant_t((IDispatch*)m_ptrConnection,?TRUE),??
  • ??
  • ??????????????adOpenStatic,adLockBatchOptimistic,?adCmdUnknown);??
  • ??
  • m_dataGrid.putref_DataSource((LPUNKNOWN)m_ptrRecordset);??
  • ??
  • m_dataGrid.Refresh();??
  • ??
  • m_ptrConnection->Close();??//在窗口銷毀時,關(guān)閉與數(shù)據(jù)庫連接,?一般是在DestroyWindow()中實現(xiàn)??
  • 標注: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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。