程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 一個好用的VC DBGRID

一個好用的VC DBGRID

編輯:vc教程

  本文示例源代碼下載

    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。下面的例子是它的一個應用。

  二、原理

  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);
}

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 下一頁
  • 尾頁
  • 共4頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved