一个好用的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)设置固定的列数

时间: 2024-09-17 03:55:24

一个好用的DBGRID的相关文章

一个好用的VC DBGRID

一.引言 在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRID,可是网上又没有找到.上次在无意中看到了CGridCtrl(一个很漂亮的表格控件,如果你还没有用过,可以到http://www.codetools.com/miscctrl/grid

一个好用的VC DBGRID[图]

本文示例源代码下载     CGridCtrl_demo19_01.zip为演示CGridCtrl的使用 CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用 一.引言 在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRI

关于delphi7开发中的一个小问题

问题描述 关于delphi7开发中的一个小问题 大家好,因为我是刚刚接触delphi7的开发,我现在有一个需求,比如adoquery1连接了 数据库A表显示数据到dbgrid上,我现在要点击一个button,然后从dbgrid上抽数据处理后再通过 adoquery2 将数据插入数据库的B表,请问能直接拖两组adoquery, 然后在button的click事件里面编码实现么,如果可以的话,能吧主要的代码写下么,谢谢啦! 解决方案 1.在窗体中,设置二组adoquery和datasource分别绑

在Delphi的DBGrid中插入其他可视组件

Delphi提供了功能强大的DBGrid组件,以方便进行数据库应用程序设计.但是如果我们仅仅利用DBGrid组件,每一个获得焦点(Grid)只是一个简单的文本编辑框,不方便用户输入数据.Delphi也提供了一些其他数据组件来方便用户输入,比如DBComboBox,DBCheckBox等组件,但这些组件却没有DBGrid功能强大.Delphi能不能象Visual Foxpro那样让DBGrid中获得焦点网格可以是其它可视数据组件以方便用户呢?其实我们可以通过在DBGrid中插入其他可视组件来实现这

关于微软的.NET Framework是一个半成品的言论!

微软 我从在大学里学习的时候就喜欢上编程,那时候学的是PASCAL,后来毕业设计的时候和几个同学用当时的DELPHI搞了一个数据库程序,得到了很多方面的鼓动和夸奖,从此以后一发不可收拾,编程也顺理成章成了我的第二个职业了,平时开开小灶拼一拼麦当劳和德克士也完全都靠它了. 也许是先入为主的缘故,我一直都用它来做项目,毕业六年多了做了了有好多,BORLAND DELPHI就像它所表现的女神一样,伴随着我很得心应手的完成一个又一个的作品.在此期间也有很多的同行勇敢地投入了VS的怀抱,可是我却一直以来都

Visual C++环境下DBGrid控件的使用

DBGrid数据表格控件以其短小精悍而深受大家的喜爱,但其如何在Visual C++中使用却很少有文章提及,本文将VC下使用DBGrid的具体步骤简要地介绍给大家. 一.前期准备 为了实现DBGrid控件的自动捆绑,我们需要建立一个数据库和与之关联的数据源,本例中我们用Access建立数据库mydata.mdb,在数据库中新建一张表users,包含三个字段username,address,email,并输入多条记录. 在控制面板ODBC数据源中建立名称为test的系统DSN,并将其指向mydat

在DBGrid中可选中行而又可进入编辑状态

如何在DBGrid中选中行,而又让它可以进入编辑状态? 也许你会问我这有什么用?呵呵,做数据库应用的兄弟们会深有感触,当用DBGrid显示的字段过多时,用户不得不拉动最下面的滚动条,去看最右边的东西,如果没有设置DBGrid->Options[dgRowSelect],那么,拉到最右边之后,很有可能看串行的:如果设置了DBGrid->Options[dgRowSelect],则在拉到最右边之后,不会看串行,但是鼠标点击其它行(不是当前选中行)时,DBGrid的视图一下子就会回到显示最左边的那一

将DBGrid中的数据导出到Word和Excel

昨天ccrun刚写了将ListView中内容导出到Word文档和Excel文档的一篇文章,今天写程序凑巧用到了将DBGrid中数据导出到Office的功能,干脆再写个兄弟版的函数出来,DBGrid2Word和DBGrid2Excel,分别实现将DBGrid中数据导出到Word和Excel文档.需要注意的是DBGrid中的数据并不代码数据库中所有的数据,因为数据集在打开的时候有可能进行了筛选,取决于使用者如何打开这个数据集,总之就是DBGrid中显示多少数据,就导出多少.看在写代码很辛苦的份上,请

Delphi实现DBGrid列宽度自动调整

大多数程序设计的爱好者选择并使用Delphi来编写软件,都是被其中丰富而功能强大的VCL控件所吸引.Delphi自带的数据感知(Data-Aware)控件,更是成为开发MIS软件的程序员之首选.在那么多数据感知控件中,TDBGrid由于其使用方便.显示信息量大成为最引人注目的一员,大量的国内外软件中都出现了它的身影.或许是由于使用的人多了,对于它的期望也会更高,永远追求无限趋向于完美境界的程序员不会放过每一个能够改良TDBGrid的机会. 经常使用TDBGrid的用户都知道,它没有提供这样的一种