我的项目还在用VS 2003做.使用Web Service得到一个DataSet,然后绑定到DataGrid上(是WinForm的DataGrid).一段时间后我需要刷新DataGrid的数据源.
我发现刷新数据源时如果直接从Web Service再次得到一个DataSet,将DataGrid的DataSource设为该DataSet,运行时会发生错误(具体是"xxx数据行不属于yyy数据表",但实际上xxx数据行肯定是属于yyy数据表的),即使先将DataGrid的DataSource设为null也没有用(此时DataGrid会变空,新的数据集没有被绑定上去).
后来在<<Windows Forms程序设计>>上查到,象这种情况,需要将现有数据集清空,然后将新得到的数据集中的数据拷到现有数据集中即可,即:
dataSet1.Clear();
dataSet1.Merge(newDataSet);
我试了果然就可以了.
但是我实在是没理解这么做的道理,为什么直接用下面的代码不起作用,绑定会丢失呢?
DataSet newDataSet = myWebService.GetDataSet();
dataGrid1.SetDataBinding(newDataSet,"tablename");
请知道的xd给我说说啊!
谢谢!!!

解决方案 »

  1.   

    好像DataSet与数据库保持握手连接。。
    你看一下《ADO.NET2.0高级编程》上面很详细
      

  2.   

    当你没有初始化dataSet1的时候再次调用好像里面的数据就乱了吧。所以每次用的时候都要在之前清空,然后再把数据转到dataSet1里面
      

  3.   

    应该不会。 
    你Null了DataGrid ,然后再给的是新的DS因该没有问题。
    怀疑可能是你的DS取得时候有问题。
      

  4.   

    谢谢各位的回答to ms44:
    我跟踪过程序,取得的DS好象没有看到什么异常,里面表和数据都是对的
    Null了DataGrid的DataSource后再绑定,的确是不报JIT的NullReferenceException了,但DataGrid上面一片空白,没有数据被绑定上来