问题描述
需求:在一个窗体上使用datagridview加载数据库中的数据(一个视图),该视图里的数据随着时间的推移会增长,所以就需要定时的检索数据并显示,数据量大概一秒钟会增长50条左右,最终该视图中的数据会达到15w行左右。根据数据的内容不同,每行的颜色不同。目前的做法:使用datagridview.datasource=dt的方法,定时重新检索数据库,然后每次重新datagridview.datasource=dt,每次绑定后再遍历一遍数据,刷新每行的颜色,然后再定位刷新前浏览的当前行。运行现象:随着数据的增长,刷新函数执行越来越慢,导致在刷新数据的时候界面无响应,感觉很慢很卡顿。在网上搜到的结果:数据量大使用,datagridview的虚模式,但是该软件还有一个重要功能是滚动条定位,拉动滚动条到底准确位置,使用虚模式滚动条是否只索引当前显示数据呢?而且数据源不停增长,虚拟模式改如何处理呢。想问问各位老师,这种需求,使用怎样的方式刷新数据比较合理呢?就是想达到刷新数据的时候,界面不卡顿,效率比较高。
解决方案
解决方案二:
数据库读出来的数据放到一个datatable中前台表格绑定另一个datatable两个datatable要有相同的列(结构一致)然后读取数据库后,根据两个表行数不同,将前台绑定表中没有的数据通过代码add进去(添加行)
解决方案三:
datagridview.datasource=dt执行后表格会整个刷新重绘,所以慢数据源指定一次就够了,后台dt行数改变,前台表格会跟随变化
解决方案四:
引用1楼Z65443344的回复:
数据库读出来的数据放到一个datatable中前台表格绑定另一个datatable两个datatable要有相同的列(结构一致)然后读取数据库后,根据两个表行数不同,将前台绑定表中没有的数据通过代码add进去(添加行)
这个我也想到了,但是比如我每10秒刷新一次,相当于增长了500行数据,500行数据,使用add的方法加进去,是不是每add一行,它自动触发xxx_Cellpainting()函数呢?这样把刷颜色的函数写Cellpainting里面就ok?