注:向dataset里添加数据的是另外一个线程

解决方案 »

  1.   

    是否可以考虑不用自动绑定,在程序中使用代码将DG和DS绑定到一起呢?也就是说,在DS更新完了以后再显示?P.S.窃以为五农民出狗是一种太过冒险的打法:)
      

  2.   

    除此之外还有没有别的办法呢?其实我就是在程序里面绑定的。但是datagrid里面空空的很难看啊,我想先显示旧的数据,等新的数据更新好了再一下子显示新的。而且在后台线程里面设置界面线程的datagrid的数据源好象会出错。btw:对菜鸟来说,五农民出狗是一种胜算最大的打法 :)
      

  3.   

    把DG的数据源设为DS1,新的数据放在DS2中,更新后让DS1=DS2,再DG.ReFresh()
    (DataSet是Marshal By Value的)TMHO:是否5DRUSH,要看地图,看对手,最大的胜算在于兵种能克制对手,所以要不断的侦察。做软件也一样,不能只看到某种语言、某个平台的优缺点,不同的应用有不用的解决方案,不是练熟一招就能天下无敌的! :)
      

  4.   

    问题在于数据源一变,datagrid就立马跟着刷新,这时根本就还没有调用refresh,十几行还不会出错,但是更新到几百行的时候肯定会出错。另外,如果只用单线程来刷新数据源的话,datagrid竟然也有一个快速刷新着增加数据的过程,可是这个时候应该是数据已经更新完毕了,原因我想datagrid既然能动态检测到数据源的改变,其内部实现机制也应该是多线程的,虽然在单线程中不会马上看得出变化,但是最后可能是把积累的刷新过程释放出来了,所以看见不停的刷新。但是和多线程不同,这个时候也是快速刷新,却不会出错。奇怪啊,千万不要是.net的bug,希望是因为我菜。jhnhu兄用星际战术喻出软件设计的道理,佩服佩服 :)
      

  5.   

    基本上应该还是算静态的,但是可能会有一个批量增加数据的过程(本地数据库中数据量少于服务器数据库上的数据的时候,需要从服务器上下载大量的数据),而且这个时候我想在界面先将旧的数据显示出来,然后再用一条后台线程进行数据下载和更新,因为下载的时候很费时间,我不希望界面停止响应。但是当下载结束,进行dataset更新的时候,因为我是用了一个循环使用dataview的addnew方法一条一条的往dataset里添加数据,所以就出现了前面讲的那种datagrid快速闪烁着刷新数据的情况。时间大概能持续一秒多钟,然后系统就出现一个
    “未处理的“System.NullReferenceException”类型的异常出现在 system.windows.forms.dll 中其他信息:未将对象引用设置到对象的实例。”
    的错误,如果数据量少的时候(闪烁时间少于一秒)出错的可能性就大大降低。这就是我的程序的基本情况,jhnhu兄觉得应该采用哪一种控件来代替现在所采用的datagrid控件呢?或者有什么其他的解决办法呢?
      

  6.   

    DataView我倒还没用过
    可以试试 用table进行添加行的操作
    如果你下载的数据也是放在dataset中的 也可以试试dataset.merge这个方法
      

  7.   

    不管是用dataview的addnew方法一条一条的增加,还是先把数据存在临时的table里再用dataset的merge方法来合并数据表,都会造成datagrid的快速刷新而出错 :(