一个好用的VC DBGRID[图]
本文示例源代码下载
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);
}
一个好用的VC DBGRID[图]的更多相关文章
- SharePoint创建一个简单的Visio Web部件图
SharePoint创建一个简单的Visio Web部件图 Visio有很多强大的Mash-up混聚功能,使它能够轻松集成到SharePoint 2010中. 1. 打开Visio 2010,创建新的 ...
- XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生
XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生 https://www.xmind.cn/
- 分享一个超级好用的SM图床
分享一个超级好用的SM图床 大家都知道我是一个喜欢sm Markdown的人,但是Markdown有个很不方便的地方,就是图片的插入,一般用Markdown编辑器(我用的是Typora)直接插入图 ...
- Android一个炫酷的树状图组织架构图开源控件实现过程
Android一个炫酷的树状图组织架构图开源控件 文章目录 [1 简介] [2 效果展示] [3 使用步骤] [4 实现基本布局流程] [5 实现自由放缩及拖动] [6 实现添加删除及节点动画] [7 ...
- 一步一步拆解一个简单的iOS轮播图(三图)
导言(可以不看): 不吹不黑,也许是东半球最简单的iOS轮播图拆分注释(讲解不敢当)了(tree new bee).(一句话包含两个人,你能猜到有谁吗?提示:一个在卖手机,一个最近在卖书)哈哈... ...
- 用Unity写一个12306验证器的恶搞图生成软件
前言 前一阵子是买火车票的高峰期,然后12306的验证码就遭到各种吐槽.其实大部分验证码没有那么难,大家只是因为买不到票 发泄一下不满的情绪.于是各种恶搞的图就出现了,比如找二次元里人物的矮子,找好男 ...
- 一个好用的web甘特图
前些天一直在弄web甘特图,发现网上很多web甘特图框架,但大部分是收费的.偶尔发现了向日葵甘特图 感觉不错,特此写下来一方面当做记录,另一方面也为寻找web甘特图的同学们少走一些弯路,双赢嘛~ ...
- SpringBoot图片上传(四) 一个input上传N张图,支持各种类型
简单介绍:需求上让实现,图片上传,并且可以一次上传9张图,图片格式还有要求,网上找了一个测试了下,好用,不过也得改,仅仅是实现了功能,其他不尽合理的地方,还需自己打磨. 代码: //html<d ...
- 用原生的javascript 实现一个无限滚动的轮播图
说一下思路:和我上一篇博客中用JQ去写的轮播图有相同点和不同点 相同点: 首先页面布局是一样的 同样是改变.inner盒子的位置去显示不同的图片 不同点: 为了实现无限滚动需要多添加两张重复的图片 左 ...
随机推荐
- 手机访问电脑wampServer本地环境页面
1. 电脑需要安装好wamp,我这里用的2.0版本,下载地址 http://pan.baidu.com/s/1jG31hbS 2. 电脑需要有个wifi,我用的360wifi 3. 启动 ...
- php中如何获取文件的正确路径
以上面的图片为例子 //我们这里需要使用到 $_FILE echo "<pre>"; print_r($_FILES); echo $_SERVER['DOCUMENT ...
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(流浪小狗,六篇,附下载地址)
本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数 ...
- docker 配置桥接网络
2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...
- 跨平台的C++应用和UI开发库 QT
跨平台的C++应用和UI开发库 QT 运行环境: 授权方式:BSD 软件大小:M 下载量:3912 更新日期:2012-04-05 来源地址: 联系作者:Linux Qt是诺基亚开发的一个跨平 ...
- 新手必看:如何快速看懂VC++项目
1.在具备必需的编程基础知识后,试图理解一份完整的代码可以从以下几个方面入手: 1)首先运行以下程序,从外部角度感受一下有哪些功能. 2)了解代码中每个类的功能.看看文档,或者类的注释,那么仅仅 ...
- spring MVC通过json与前台交互
这里用的是spring4.1.4,jquery2.1.3,其它环境为:myeclipse2014,tomcat7,jdk7 首先,新建一个web工程,并导入springMVC的jar包(为了方便起见我 ...
- PLA 多维情况下的vc维
对于d维的数据集,vc = d+1 证明: $vc \geq d+1$ : 存在d+1个点可以被H shatter 构造矩阵(注意加上$w_0$对应的$x_0$) 注意x可逆,构造$w=X^{-1 ...
- nginx源代码分析--配置文件解析
ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其他作用域. 同一作用域的不同的配置指令没有先后顺序:同一作用域能否使用同样 ...
- js实现弹出窗口、页面变成灰色并不可操作的例子
function show() //显示隐藏层和弹出层 { var hideobj=document.getElementById("hidebg"); hidebg.style. ...