(一个好用的VCDBGRID.docVIP

  • 3
  • 0
  • 约6.62千字
  • 约 6页
  • 2017-01-30 发布于北京
  • 举报
(一个好用的VCDBGRID

本文示例源代码下载 ??? CGridCtrl_demo19_01.zip为演示CGridCtrl的使用   CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用   一、引言   在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRID,可是网上又没有找到。上次在无意中看到了CGridCtrl(一个很漂亮的表格控件,如果你还没有用过,可以到/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); } 在上面的代码中,SetGridItem(pDispInfo)是我们自己加的函数,在这个函数里我们设置当前要显示的数据,pDispInfo是一个GV_DISPINFO的结构体对象,在这个结构中包含了每个单元格的信息,如行号,列号,有没有位图,背景色,前景色等,CGRIDCTRL会在当前要显示那个单元格时,会把这个单元格的行号,列号传递给我们,我们只要在里面设置要显示的数据就可以了。如下面是一个显示数据的例子。 int CMyOdbcDlg::SetGridItem(GV_DISPINFO *pDispInfo) {    pDispInfo-item.strText.Format(row%d,col%d,pDispInfo-item.row, pDispInfo-item.col);      return 0; }   通过上面的介绍,我们应该已经会使用CGridCtrl虚模式,下面说明一下用CGridCtrl虚模式做DBGRID的原理,大家都知道,MFC的CRecords

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档