请用过TdxDBGrid的朋友指点一下,由于设置了排序功能导致数据装载速度缓慢的问题。(300分)

  • 主题发起人 主题发起人 萧月禾
  • 开始时间 开始时间

萧月禾

Unregistered / Unconfirmed
GUEST, unregistred user!
在TdxDBGrid中,为了达到点击标题栏对当前字段的数据列表进行排序的功
能,要设置TdxDBGrid的KeyField属性为某字段(通常是主键字段),然后
设置OptionsDB下的edgoLoadAllRecords为True。这样达到了点击标题排序
的目的,却带来另一个问题,即打开表数据时耗时甚多,速度缓慢,数据量
上万时就非常明显,如果机器配置不高,还可能导致死机,不知道有没有人
遇到过这样的情况?能否说一下解决的办法?萧某恳谢!
 
自己写排序的代码,不要用它的排序功能。用到了LoadAllRecords模式一定会发生这个现象的。
 
虽然我很想帮你,但是你给我的那两个问题我都没有经验,实在抱歉了。
 
没用过此控件啊,实现帮不上你忙!
 
自己写排序就是了,取出GRID表头的字段名,用QUERY在单即表头的事件里写一个[过程]
随便在哪里调用。
 
其实我目的是想保留LoadAllRecord的属性值为True,它可以做很多事情,却导致速度变慢
如果仅仅是为了排序的话,几行代码就可以解决了(在它的OnColumnClick事件中写,而且
表示排序方向的那个箭头也可以很好地控制,设置Column.Sorted为csDown或csUp)

看来还是没办法,实在不行就算了
请大家关注我的另一个帖子,谢谢
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1199295[:)]
 
这个问题当然遇到过,这样速度慢是很自然的,
但你有没有想过,一下子显示几万条记录有必要吗
谁能一下子去看几万条记录,你为可不能给他们分批显示
或只给出一个统计的结果。
 
对了,如果你使用的是ADODataSet那就好办了,你把dxGrid的那年排序属性关了,用ADO的来作。
用它的Sort属性来排序,就不会慢了。
dxGrid的功能是很强,但那可是以牺牲效率为代价的。
 
这问题需要经验,程兄你来帮他
你还是别干了,上班看到不愿意看得人,多难受啊
 
to 萧月禾:
fossil的后一句是对你另有所指。
 
呵呵,程云已经说了,我就不献丑了.
 
上班看到不愿意看得人,多难受啊
~~~~~~~~~
是谁丫~嘿嘿~

俺也只能听课了~~
 
老大,不好意思,兄弟不会,这么久了,没有长进 惭愧~~~~~

来听课
 
to hbezwwl:
你有什么好想法,可不要藏私呀。
公布公布。
 
其实这东西是在查询模块上用的,根据用户自己配置的查询条件查询所需要的记录
可能一条都没有,也可能有几万条甚至几百万条
排序那功能我早已经另外写好,的确是用AdoDataSet的Sort来做,其实我主要是想
保留TdxDBGrid的LoadAllRecord属性为True而已,它可以做很多事情,但现在已经
确定它将以牺牲速度为代价,于是放弃之,感谢各位参与。

LoadAllRecord属性是决定是否把数据从数据集中全部读到其Grid下,如果为false,
则只读取显示的那一页,所以此时速度较快(其实这也是它的优点之一)

to 程云,fossil:
虽然有一些不如意的事情发生,但相信暂时还是能撑下去,毕竟我也不是小角色的 :)
“一不看人脸色,二不低声下气”这样的行为虽然会给工作带来一些负面影响,不过
我还是会继续下去,首先不想对不起自己[:)]
 
1、在load 前设 dxdbgrid.datasource.dataset.disablecontrols,
在load 后 dxdbgrid.datasource.dataset.enablecontrols
2、可在form 上放一些查询条件设置,让用户只看到他最想要看的一些记录,以减少数据量
 
不要一下子显示这么多记录,我处理时一般每次只显示50条记录。
 
多人接受答案了。
 
后退
顶部