- 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
您可能关注的文档
- (浙江省台州市外国语学校20132014学年高二政治上学期期中试题.doc
- (浙江省台州市大田初级中学20142015学年第二学期期中考试七年级科学试卷.doc
- (如何用周KDJ和10日均线做短线.ppt
- (xin信访工作责任追究办法.doc
- (浙江省台州市某重点中学20132014学年高二上学期期中考试政治文试题.doc
- (XL3418材料力学多功能实验装置电测实验指导书七实验标准新.doc
- (XLCHHD1合同段冬季施工安全应急预案.doc
- (浙江省化学竞赛试题扫描有完整答案和评分标准.doc
- (XP10秒启动登录极速优化XP开机.doc
- (浙江省台州市椒江二中科学竞赛七年级试卷.doc
- 初中九年级英语Unit 13环境保护主题听说整合教学设计.docx
- 85分式方程及其解法课件人教版数学八年级上册.pptx
- 基于核心素养的博物馆主题说明文写作教学设计与实施——以九年级英语为例.docx
- 53一次函数的意义第课时课件浙教版八年级数学上册.pptx
- 大单元视角下“人民民主政权的巩固”与历史关键能力进阶教学设计——以初中历史中考复习课为例.docx
- 五年级数学下册典型例题解析人教版期末重点攻克.pptx
- 小学四年级信息技术《智启信息时代:查找网上信息的基石》教学设计及反思.docx
- 大疆域·大人口·大战略:中国国家空间认知的初步建构.docx
- 人教版(一年级起点)小学英语四年级上册Revision 1 Lesson 2教学设计.docx
- 大单元结构化复习:旧民主主义革命时期(18401919)的内忧外患与救亡图存.docx
最近下载
- 党员2025年度组织生活会“(对照贯彻党的创新理论方面,对照加强党性锤炼方面,对照联系服务群众方面,对照发挥先锋模范作用方面,对照改作风树新风方面)五个对照”对照检查材料.docx VIP
- 2025年湖南省永州市中考部编人教语文试题及参考答案解析及答案.pdf VIP
- 设备安全危险预知培训课件.pptx VIP
- 2025CWIS指南:肋骨骨折手术稳定PPT课件.pptx VIP
- 神经病学第九版-第二章 神经系统的解剖、生理及病损的定位诊断.pptx VIP
- 广州市五年级上学期语文期末考试试卷.doc VIP
- VTE的预防和护理课件(完整版).pptx VIP
- 陕西省2025年初中学业水平考试物理试卷真题(含答案详解).docx
- 数据中心浸没式液冷系统功能规范.docx VIP
- 测控电路(第5版)李醒飞课后习题答案(含一到五章).pdf
原创力文档

文档评论(0)