<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    一個好用的VC DBGRID[圖]

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 本文示例源代碼下載

        CGridCtrl_demo19_01.zip為演示CGridCtrl的使用

      CGridCtrl_demo19_02.zip演示與CMYODBC的配合使用

      一、引言

      在用vc開發關于數據庫的項目時,通常我們只好用微軟的DBGRID作為數據庫表格控件,其實微軟的DBGRID并不好用,想找一份好的幫助文檔都找不到,并且界面并不友好,比起C++Builder中的DBGRID來說是遜色不少,但是DBGRID在開發數據庫的項目中又是常用的控件,所以就一直想找一個好用的DBGRID,可是網上又沒有找到。上次在無意中看到了CGridCtrl(一個很漂亮的表格控件,如果你還沒有用過,可以到http://www.codetools.com/miscctrl/gridctrl.asp/下載,上面還有詳細的使用說明)支持虛模式,在這種模式下,即使你向這個表格插入一百萬條數據,它并不會真的生成一百萬行,而是隨著你的滾動條的滾動,計算出在屏幕上要顯示的行和列,然后會向你提供一個接口,通過這個接口,你可以在這兒設置你要顯示的數據。這給了我一些啟示,我決定用它來做一個DBGRID。下面的例子是它的一個應用。

    一個好用的VC DBGRID[圖]

      二、原理

      DBGRID和一般的GRID的不同之處在于,一般的GRID并不適合顯示大的數據量,如果你的一個查詢結果有上萬條記錄的話,如果你都要插入到GRID中,這將是一個很慢的過程,并且你在GRID中移動滾動條的話,它的記錄的滾動也是很慢的,而DBGRID并不會真正把這些記錄的數據全部插入到控件中,當DBGRID的滾動條滾動時,它會根據DBGRID的顯示面積的大小和查詢得到的總的記錄數計算出當前應該顯示哪那些行,然后會把那幾行的記錄數據插入到表格中,這樣速度當然是很快的,而且沒有數據量多少的限制。

      幸運的是,CGridCtrl類已經為我們提供了這種機制,它是采用虛模式的方式,要使用這種方式,按照以下的步驟就可以了:

      步驟一 初始化

    void SetVirtualMode(TRUE) 設為虛模式
    BOOL SetRowCount(int nRows) 設置總的行數。
    BOOL SetFixedRowCount(int nFixedRows = 1)設置固定的行數據
    BOOL SetColumnCount(int nCols)  設置列數
    BOOL SetFixedColumnCount(int nFixedCols = 1)設置固定的列數
      步驟二 響應消息 顯示數據

      我們假設CGridCtrl是放在對話框上,而且它關聯的變量是m_Grid,利用ClassWizard添加對話框的OnNotify響應函數。這個響應函數的寫法是固定的,類似下面的代碼:

      BOOL CMyOdbcDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
    {
       if (wParam == (WPARAM)m_Grid.GetDlgCtrlID())
       {
         *pResult = 1;
         GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam;
         if (GVN_GETDISPINFO == pDispInfo->hdr.code)
         {
         /*這是我們自己加的函數,在這個函數里我們設置當前要顯示的數據*/
           SetGridItem(pDispInfo);
           return TRUE;
         }
       }
       return CDialog::OnNotify(wParam, lParam, pResult);
    }

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全