日期:2014-05-17  浏览次数:20863 次

Winform程序下Datagridview的使用问题。
我在winform下加了一个datagridview控件,想让他显示本地数据库中的一个表内容。我绑定了数据源,如图


因为表格中的数据是不断变化的,所以我想让表格中的数据每5秒刷新一下。显示当前表格中的内容。
所以,我在load中添加了一个线程,让他执行刷新事件。线程代码如下
C# code

          //启动 短信记录刷新 线程名称为 newthread3
          newthread3 = new Thread(new ThreadStart(t_record_flash));
          newthread3.IsBackground = true; 
          newthread3.Start();



定义了t_record_flash()
C# code

public void t_record_flash( ) //短信记录刷新事件
        {
            while (true)
            {
                try
                {
                    this.t_historyTableAdapter.Fill(this.messageMedomDataSet.t_history);
                }
                catch(System.Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }
                Thread.Sleep(5000); //5秒之后再次执行该时间,不停刷新
            }
        }



现在我运行程序,会出现如下图错误。


。。但是如果我在 While(true)处打上断点,一步一步执行,也没发现什么错误啊。。。求大神 谢谢

------解决方案--------------------
你所说的功能没有必要用线程来实现啊,用一个TIMER就行了。而且我实现起来更加简单
------解决方案--------------------
用TIMER吧,不用考虑访问UI线程的问题
------解决方案--------------------

这个是数据绑定错误,不是流程上面的。
------解决方案--------------------
trimer 啊..........在trimer中重新绑定数据库就得了...或者你要是觉得你的方法可行,就在你的方法中重新绑定数据吧.
------解决方案--------------------
一个事件中多次改变UI显示的内容,UI显示的内容只会接受第一次后最后一次事件改变的结果。因此你在每次事件结束,强制刷新一下UI。datagridview.Refresh();
------解决方案--------------------
如果不用自动刷新数据 第一次绑定数据会有问题吗
------解决方案--------------------
探讨
一个事件中多次改变UI显示的内容,UI显示的内容只会接受第一次后最后一次事件改变的结果。因此你在每次事件结束,强制刷新一下UI。datagridview.Refresh();

------解决方案--------------------
是不是因该update 你这样 是不停的忘里面塞数据啊 
我觉得应该就是fill的问题 重复添加啊主键值