怎样使大量数据在Grid控件中显示时,不占用太多时间

 我来答
匿名用户
2015-08-04
展开全部
  我一个access数据库,1万多条记录,查询时ADOQuery后的数据通过DataSource控件全部显示在DevExpress 的 cxGrid控件中,每次查询需要耗时5秒钟才能响应用户操作。 请问能否提供方法使Grid快速相应?就像access中或SQL SERVER中打开大量数据的表时,显示完部分数据后,其它数据后台更新,快速响应操作你把数据分页显示,速度就上去了。。。对,我就是想要这样,但如何分页显示呢?关注这个帖子帮你顶下~ 我也想知道cxGrid我没用过,不过我用DBGrid显示Access数据库中一个四万多条记录的表,也就两三秒而已。能说说怎样处理的吗?最好还是优化一下数据(查询语句)。。对於不需显示的橍位尽量不要, 其实不管怎么好的数据网格控件。。在数据量很大的时候。。都会有相对慢的问题。。因为显示屏的大小是有限的,所以每屏显示个30条记录就差不多了。 程序中处理上一页、和下一页。程序中能让用户设置每屏显示的记录数。必须自己写程序控制每页的显示数量吗?数据网格控件自己不带有以上功能吗? 就像SQL SERVER或ACCESS那样,有大量数据时,首先先是一页,接着就能响应用户操作,同时后台继续在数据网格控件中添加其他没有显示的数据请帮忙大家都不清楚吗关一下 。。。大家给个面子好不好求助dbGrid 跟StringGrid (你的cxGrid应该是StringGrid)有本质的区别, dbGrid仅仅需要显示的就是行数区域的,也可以说dbGrid有分页的作用。 stringGrid没有, 你可以 load 时候 用Application.processmessage我用的DevExpress的Grid控件,他本身是数据感知的,通过DataSource控件获得数据集,但我没有找到他的分页功能呢? 请帮忙cxGrid我没用过,不过我用DBGrid显示Access数据库中一个9万多条记录的表,也就两三秒而已。 CPU: P-M1.4 内存:256M 硬盘还是4200转的我也是笔记本,咱们差不闭正多,关键是不仅仅查询,而且还经过一些SQL运算,所以耽误时间了,我看主要是数据表格控件的速度不够,不加数据表格,单独查询,很快就完成了关注一下 对于用户选择商品信息的情况,大家是怎么处理的?商品信息表大概有几万条记录。cxGrid本身还对数据记录进行转换处理的,它有自己的数据记录格式,所以速度上有所损失。 不可否认,cxGrid的功能是强大的,其查询、过滤、分组等功能能让你不用写一行代码。 SQL Server的企业管理器以及DB2的iSeries等类似客户端在每次查询时并不接收所有的返回记录,它们在接收一定数目的记录后就暂停接收,在客户需要时再进行接收剩余的部分记录。这是客户端做到的。楼主是不是搞错了? 参考DBGrids.pas源码(TCustomDBGrid.DrawCell),DBGrid显示数据是显示多少行就读多少行的数据,不是将整个数据集读进内存,所以即使有一亿条数据,它也不会花什么轿磨时间来显示,花时间的是连接数据库的数据集部件和数据库程序,DBGrid也不保存不显示的数据。 StringGrid跟DBGrid有明显区别,DBGrid的数据源来自数据集,StringGrid的数据源来自内存,所以StringGrid显示之前要将数据放入内存,楼主的想法只有对StringGrid才有意义,不过也不用在后台取闭态斗数,只要监视StringGrid的TopLeftRow,仿效DBGrid读入当前一页的数据即可。 至于cxGrid等表格不是显示慢,而是因为要完成各种功能,势必要历遍整个数据库一次甚至多次,所以比较慢,没有好办法。 因为cxGrid在读入数据后要对所有字段和所有纪录进行一次映射,慢是无可避免的了。如果表格中有Lookup字段就更是慢上加慢没办法了吗?只能换DBGrid控件了吗?dbgrideh也不错郁闷,难道要更换数据表格控件?系统已经完成了,使用维护中才发现大量数据显示慢的问题,要全部更换控件可不是一件简单事啊为了用户的利益,换控件吧明天结帖,看看还有没有一线生机没有希望了吗?放弃cxgrid的一些功能可以加快速度,我不会随便用cxgrid,因为dxgrid升级成cxgrid之后,之前写的程序就报废了,万一以后来了exgrid,fxgrid怎么办,此其一,cxgrid很多花俏的东西,你搞编程的会用,但连电脑也不怎么懂的用户会用吗?有些功能有用吗?别说在中国,我想老外也不一定使用,此其二,cxgrid很多鼠标操作的功能,作为屏幕展示确实很吸引人,但是真正处理事务,这些功能除了花时间没有什么意义,此其三,cxgrid控件很特别,不与其它兼容,连自己的dxgrid也不兼容,很容易被吊死在这棵树上,要换控件几乎要重写整个程序,思路都要变了,此其四,所以没有什么特殊用途,任它的功能再强大,也得慎重考虑,避免后悔。是啊,cxGrid确实不少弊端,换数据表格控件不是不行,但有原因:系统已经完成,使用了很长时间了,更改控件可能引入Bug,此其一;数据表格中许多要用到主从,甚至三层关系,不用cxGrid也要使用别的第三方控件,一样存在兼容性问题,此其二;三、我比较信任DevExpress的研发能力,认为一定有解决方法,此其三;我也不想就这样放弃,还在尝试别的方法,此其四。 嘿嘿,效仿楼上,勿怪。 也许多线程可以,我晚上试试,看SQL SERVER和ACCESS显示数据记录时,感觉是用了多线程的样子……楼主,泼泼冷水,一旦在数据库使用多线程,你将会遇到前所未有的困难------数据集控件的线程安全问题,举个例子,有多个线程同时使用一套数据控件 a:=DataSet.FieldByName( *** ).AsString. b:=DataSet.FieldByName( *** ).AsString. 连续执行这两句,b有时等于a,有时又不相等,还会读数出错,甚至报告致命错误,把程序当掉,因为数据控件已经被其它线程修改,或者删除,或者两个线程同时读数,使用Synchronize,可以解决问题,但这就是变相回到单线程,甚至比单线程执行还慢,结果从这个井出来,又落入另一个井,并且越跌越深,经验之谈,信不信你可以试试。最简单的方法就是减少每次读取的数据了,好像一下子读入几万笔数据没有太大必要。1: .DisableControls 2:go 3: .EnableControls今天没时间了,琐碎的事太多,没办法静下心来写代码,感谢 kinneng 老兄的不吝指教,用天下无贼里的那就话: “我想试试”。拖一天再结帖吧确实没有找到好的解决办法,看来在以后的程序中只能分页显示了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式