请教一个关于datagridview定时刷新的问题,大家多多顶贴啊,顶者有分

时间:2021-05-13 21:30:07
winform中一个datagridview,要求每隔1秒去数据库读一遍数据

现在的做法是,用timer定时去读取,并用dgvTable.DataSource = dt;重新绑定,

但是这样做,数据量大的时候刷新闪动的太历害了,有没有更好的办法?

12 个解决方案

#1


性能与速度的平衡 

#2


直接设置单元格的值

通过循环,比较当前单元格的值是否有改变,如果改变了,进行修改

不通过绑定方式进行,因为绑定会全部刷新

#3


每秒都去读取和重新绑定,这样的操作效率很低,
建议 只有在数据源表中数据有变更时再重新绑定数据源。
可以在表中添加个字段 来判断该记录是否有变更。

#4


楼上的建议,我也考虑过,但是数据库提数据是实时变更的,基本上每秒的数据都不一样

#5


给数据库中需要绑定的数据加上触发器,有值改变则进行刷新

#6


引用 3 楼 whitechololate 的回复:
每秒都去读取和重新绑定,这样的操作效率很低, 
建议 只有在数据源表中数据有变更时再重新绑定数据源。 
可以在表中添加个字段 来判断该记录是否有变更。

up

#7


不要重新绑定数据源,直接对数据源进行操作
建议这样做,你再见一张表,做日志使用,所有insert,update,delete操作,都记录日志,你刷新的时候,根据日志去取数,比如,读取日志的时候,发现日志中有两条insert的操作,把这两个insert对应的记录找出来,读取到客户端,然后Merge到你原有的结果集中,如果是update操作,找出Update对应的记录,客户端的结果集中将那些记录替换,如果是delete,则将所有delete掉的记录的记录号等等找到,然后在客户端将对应的记录删除就好了。

#8


唉,都不是个办法。关键是时间太短了。

#9


引用楼主 xiaoyue520 的帖子:
winform中一个datagridview,要求每隔1秒去数据库读一遍数据 

现在的做法是,用timer定时去读取,并用dgvTable.DataSource = dt;重新绑定, 

但是这样做,数据量大的时候刷新闪动的太历害了,有没有更好的办法?


每次去数据库读取数据的时候,只取自上次读取以来,有修改的或新增的数据。
读取回来之后,merge到 dgvTable.DataSource 。这样DataGrid就更新显示了。

#10


谢谢楼上各位的回答

还有没有更好的办法,因为是读取传感器返回的数据,所以基本上每秒数据都不一样

如果现在就假设每秒数据都不一样,有没有更好的办法

#11


关注。。。。。

#12



分页

#1


性能与速度的平衡 

#2


直接设置单元格的值

通过循环,比较当前单元格的值是否有改变,如果改变了,进行修改

不通过绑定方式进行,因为绑定会全部刷新

#3


每秒都去读取和重新绑定,这样的操作效率很低,
建议 只有在数据源表中数据有变更时再重新绑定数据源。
可以在表中添加个字段 来判断该记录是否有变更。

#4


楼上的建议,我也考虑过,但是数据库提数据是实时变更的,基本上每秒的数据都不一样

#5


给数据库中需要绑定的数据加上触发器,有值改变则进行刷新

#6


引用 3 楼 whitechololate 的回复:
每秒都去读取和重新绑定,这样的操作效率很低, 
建议 只有在数据源表中数据有变更时再重新绑定数据源。 
可以在表中添加个字段 来判断该记录是否有变更。

up

#7


不要重新绑定数据源,直接对数据源进行操作
建议这样做,你再见一张表,做日志使用,所有insert,update,delete操作,都记录日志,你刷新的时候,根据日志去取数,比如,读取日志的时候,发现日志中有两条insert的操作,把这两个insert对应的记录找出来,读取到客户端,然后Merge到你原有的结果集中,如果是update操作,找出Update对应的记录,客户端的结果集中将那些记录替换,如果是delete,则将所有delete掉的记录的记录号等等找到,然后在客户端将对应的记录删除就好了。

#8


唉,都不是个办法。关键是时间太短了。

#9


引用楼主 xiaoyue520 的帖子:
winform中一个datagridview,要求每隔1秒去数据库读一遍数据 

现在的做法是,用timer定时去读取,并用dgvTable.DataSource = dt;重新绑定, 

但是这样做,数据量大的时候刷新闪动的太历害了,有没有更好的办法?


每次去数据库读取数据的时候,只取自上次读取以来,有修改的或新增的数据。
读取回来之后,merge到 dgvTable.DataSource 。这样DataGrid就更新显示了。

#10


谢谢楼上各位的回答

还有没有更好的办法,因为是读取传感器返回的数据,所以基本上每秒数据都不一样

如果现在就假设每秒数据都不一样,有没有更好的办法

#11


关注。。。。。

#12



分页