winform程序Datagridview加载数据,数据刷新问题

问题描述

需求:在一个窗体上使用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?

时间: 2024-10-31 17:09:04

winform程序Datagridview加载数据,数据刷新问题的相关文章

C# winform程序动态加载控件,总是窗体先出现,窗体上的控件出现屏幕背景,闪一下 才出现控件,出现的时间也不同步

问题描述 初始化显示控件,或者是alt+tab切换页面,的时候都是整个页面先出来,就是有个别的控件出来的很慢,而且带有屏幕的背景色一闪而过,才完全加载出来 解决方案 解决方案二:Up,求解答啊,界面现在初始化的时候,有点闪,接受不了,解决方案三:vs自动生成的Form1.Designer.cs中,控件都是用下面代码包裹起来的.你就没想过是为什么吗?this.SuspendLayout();......this.ResumeLayout(false);this.PerformLayout();解决

jquery的getjson实现页面不刷新加载剩余数据方法事件

有了"用JS将一个div插入到指定的一个div中或后面"这篇文章的指引基础,下面还是以情景的模式来叙述怎样用JS做到不刷新加载剩余数据. 案例情景: 一个评论页面,先只显示了10条数据,我要通过js+ajax获取数据无刷新页面异步加载显示下一个10条数据,接着触发一次.显示10条,直到全部显示完整. 解决原理步骤: 1.首先要取得下一个10条评论数据字符串 2.然后将数据赋值到原先10条评论后面 3.同时更新剩余评论数显示.判断如果剩余数少于0则隐藏图标 完整HTML代码:(程序后台代

Winform打开窗体,在窗体加载完数据前如何显示正在加载效果。。

问题描述 背景:软件是一个左右栏布局的结构,左边为菜单,右边是要打开的窗体显示区域.效果:点击左边菜单,右边打开对应窗体1.由于有些窗体在打开前需要预先加载一些数据,数据过多的时候,会出现窗体卡住的情况我自己做的是在Load的事件里面开启一个线程,来异步加载.但是在加载完后把数据赋给控件的时候,特别麻烦,调用控件的BeginInvoke方法.如何判断目标窗体加载完成,如何在完成后通知Loading效果关闭...求指点,有没有其他好的办法. 解决方案 解决方案二:通过事件通知.目标窗体加载完成后发

Swift表格tableView上拉加载新数据的功能实现例子

对于表格(tableView)来说,下拉刷新数据.上拉加载数据应该是两个最常用的数据更新操作了.对于前者,我原来写过一篇相关的文章:Swift - 下拉刷新数据的功能实现(使用UIRefreshControl).本次我来讲讲后者的实现. 说是上拉加载数据,其实就是当我们将表格内容滚动到最后一行时,系统就会自动获取新的内容并添加到列表尾部(具体效果可以参考百度贴吧的App).下面我们通过一个小样例来演示上拉加载的实现. 1,样例效果图 (1)当初次进入程序时,先加载前20条数据. (2)当 tab

ios异步加载表格数据及内容不能及时显示的问题

异步事件,就是说这一个代码或者代码块,并不会阻塞程序的运行,程序会立即执行下一条语句,而这条语句,会在相应的方法调用结束之后,执行它自身的回调函数发送一些信号,来表明这个异步事件完成.就像你约会提前1小时到见面地点,先去买点东西踩点什么的(--),等GF/BF到了之后短信通知你,你就立即回来.而不是一直在原地等到对方过来(--) 最早使用异步开发,是在使用JavaScript来开发Web前端的时候,XMLHttpRequest或者jQuery的$.ajax中,都会用到回调函数,来指明成功或者失败

ios-IOS&Android开发:如何从大量未加载的数据中加载一定量的数据到列表中

问题描述 IOS&Android开发:如何从大量未加载的数据中加载一定量的数据到列表中 绝大多数新闻资讯类应用开发过程中都会遇到这么一个问题: 规定每次从服务器最多只能获取20条数据,第一次刷新获取了20条最新的数据,添加到列表中,过一段时间有了30条未刷新的记录,这下问题来了:第二次刷新时是获取最新的20条还是接着第一次获取之后的20条数据放在列表前面?前者会导致列表中间空缺一部分数据,后者问题是要多刷新几次才能把所有数据获取到. 有过相关开发经验的大神们来说说你们的解决方案. 解决方案 刷新

Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

   在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是通过AsyncTask来实现,另一种方式则是通过ThreadPool来实现,今天我们就通过一个例子来讲解和对比这两种实现方式.     本文原创,如需转载,请注明转载地址http://blog.csdn.net/carrey1989/article/details/12002033     项

fragment-Fragment异步加载网络数据不显示

问题描述 Fragment异步加载网络数据不显示 我一个ViewPager里有四个Fragment,然后启动应用后默认显示第一个Fragment,第一个Fragment需要从网络获取数据来设置UI的属性,所以我在第一个Fragment类中写了一个异步操作获取网络数据然后赋属性给UI,这个Fragment中还有一个按钮,点击按钮会再次从网络获取数据然后刷新UI.可是当我打开app的时候,第一个Fragment并没有显示网络数据,只有当我点击刷新按钮的时候,数据才能被显示出来.另外如果我滑动到其它几

c#-winform程序listview控件修改数据后动态刷新效果

问题描述 winform程序listview控件修改数据后动态刷新效果 在另一个窗口中修改好listview控件数据,并能在listview立刻显示出来. 怎么实现求大神指点!谢谢 解决方案 参考:http://bbs.csdn.net/topics/360140208 解决方案二: 你所谓的立刻是什么意思? 解决方案三: 在Form2窗体中声明 public Form1 f1; Form1按钮单击事件中: Form2 f2 = new Form2(); f2.f1 = this; f2.Sho