我用一个textBox绑定数据,问题是:1、  textBox在更改值后,一定要在失去焦点后,才能更新内存数据源(如:Ds)吗? 或者是有其它的事件,是自动更新还是要写代码更新数据源(Ds)?2、如果在内存数据源(Ds)已更改了的情况下,为什么不能就使用Update更新数据库的数据,还要加一个AcceptChange,用两个有什么意义,它们两个到底谁干什么事。 3、更改textBox值后,就已经更改了Ds的数据(通过访问Ds.tables["tablename"].[x][y]),但在我调用: Update ,Acceptchange后,sql数据库根本没有更新, 而我给Ds.tables["tablename"].[x][y] 赋上值后,update,acceptchange后,sql数据库更新了。实在太迷惑了,请指教!!!

解决方案 »

  1.   

    DataAdapter通过遍历DataTable中的DataRow根据不同的DataRowState来调用相应的Command
    (InsertCommand,UpdateCommand,DeleteCommand)。因此调用DataAdapter.Update方法应该是在
    调用 AcceptChanges 之前。
    因为调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象将成功结束其编辑。DataRowState也会随之更改:所有状态为 Added 和 Modified 的行的状态都变为 Unchanged;状态为 Deleted 的行则被移除。
    而使用 DataAdapter.Update 方法更新 DataSet 之后,通常会对 DataTable调用 AcceptChanges 方法。
      

  2.   

    textBox在更改值后,你焦点还在文本框内的时候,你怎么知道用户修改完成?
      

  3.   

    1.你可以在TextChanged事件里写,但是很不科学
    2.fangxinggood(JustACoder) 说的很对,如果在Update之前调用了AcceptChange,那么数据库不会做任何更新,因为RowState都为Unchanged
    3.同2
      

  4.   

    问题越来越多了:1、那update到底是更新ds,还是sql?(引用fangxinggood(JustACoder的说法:...而使用 DataAdapter.Update 方法更新 DataSet 之后...update就是更新ds,那绑定又有何意义??????????????)2、为什么一定要在update后加上一个acceptchange才能更新sql?3、按你们所说那:acceptchange不就是撤消ds的更改吗,如果update的作用是装ds的数据提交sql,那么在未将数据更新到sql之前它是有作用 的,有撤消的作用,但在更新之后,它的执行有何用处,因为ds的数据和数据库的数据都一样了。4、我在实践中,绑定的textbox的值更改后,ds的值也就改了,datagrid也一样,但在update及acceptchange之后,textbox 是不能更新sql的,datagird则可以,为什么????
      

  5.   

    可以参考这几篇文章,得到比较多的理解,
    http://blog.csdn.net/zhzuo/archive/2005/01/03/238273.aspx
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67016.aspx
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
      

  6.   

    DataAdapter.Update 方法更新 DataSet 我这句话省略的有点过分了:) ADO.NET是一种支持离线数据操作的数据库操作技术。
    DataSet好比内存里的数据库镜像,更新Update方法,更新DataSet,实际上就是将
    DataSet与数据库数据同步,就是更新数据库啦。AcceptChange方法实际就是告诉DataAdapter,我这里的数据已经跟数据库同步啦,
    不用再更新了。