DataSet中已经用DataAdapter.Fill填充了数据,并且设置了主键。下面再刷新数据不想清除原有数据,而还使用Fill方法。出现的问题是:数据库中增加、修改的行在dataset中得到了更新,但删除的行在dataset中还存在。怎么解决?(难道一定要在填充前clear吗?这样刷新会出现闪烁的。)

解决方案 »

  1.   

    执行一下:
    dataset.Table[0].AcceptChange();方法.DataSet中的删除行会自动删除.执行此方法前,只是做了一个删除标记,实际上并没有真正的删除您删除的行.
      

  2.   

    一楼,我感到他说的是他不通过DATASET而是在数据库中更新然后再显示到DATA中。不知是不是这个意思啊。
      

  3.   

    bhwhy(苏秦):是的。因为存在多个用户去更新数据
      

  4.   

    to ChengKing:该方法不行的。fill过后,行的状态都为Unchanged
      

  5.   

    MSDN中:"您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在,则传入行会与已有的匹配行合并。如果主键不存在,则传入行会追加到 DataTable 中。"。
    这个过程是合并过程啊,高手们有没有解决的办法?不然只有之前Clear数据了.哎
      

  6.   

    哈哈,如果存大多用户同时操作的话,
    就只有重读啦如果只是要本机则可以先
    dataset.Table[0].AcceptChange();再fill一次
      

  7.   

    to 出现的问题是:数据库中增加、修改的行在dataset中得到了更新,但删除的行在dataset中还存在。怎么解决?那你就不要再重新fill了,而改用DataSet.AcceptChanges()来替换原先的fill操作。
      

  8.   

    ReViSion(和尚)的方法应该是对的,我都是这么处理的。但是如果用户多了,还是重新加载数据吧
      

  9.   

    TO Knight94(愚翁):你这样做,另一用户更改了数据库信息。你这边能得到刷新吗?
    你可能还没理解我的意思
      

  10.   

    谢谢各位。需要说明的是这里所要解决的是在多用户情况下的刷新。希望通过DataAdapter.Fill方法得以刷新。
    MSDN中:"DataAdapter.Fill 方法  在 DataSet 中添加或刷新行...."。
    我这里希望在原有的dataset上刷新。有没有办法解决?而不是再在dataset在添加表或对dataset.clear后再填充。这样都会使datagrid闪烁。
      

  11.   

    MSDN中:"您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在,则传入行会与已有的匹配行合并。如果主键不存在,则传入行会追加到 DataTable 中。"。
    ----------------------------------------
    都说了是合并了。结果应该是这样的啊。不过好像很多人没明白lz的意思啊,特别是说acceptchange的。
      

  12.   

    把所有row的state都设成Deleted,再fill
      

  13.   

    这个应该和Clear一样会闪的,  我真 菜啊~~~
      

  14.   

    真的没有解决的办法?help
      

  15.   

    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx