本帖最后由 athwind 于 2011-11-30 19:36:26 编辑

解决方案 »

  1.   

    你的意思是Equals方法进行比较的问题吧,Equals在比较引用类型时是比较对象的内容,对吧?而不是引用地址ReferenceEquals、Equals、==这三者的区别,不知道是否我理解错了,你认为呢?
      

  2.   

    按照你在#1的代码,进行修改执行之后 你会发现 iIsModified 为false现在你连引用类型都不太清楚,和你说深复制和浅复制 你更理解不了。
      

  3.   

    深复制、浅复制,我理解不了??
    哎,我真理解不了你怎么觉得好像自己很nb一样的,不要在这买官子,
    进行修改执行之后 你会发现 iIsModified 为false
    不要瞎说,你不怎么懂
      

  4.   

    是这样的,我从数据源DataRow绑定数据到窗体的控件,然后要把控件的值赋给DataRow,再判断是否修改,如果修改则进行保存
      

  5.   

    是准备用sqladapter.update(..)?
    如果是这样,自己判断一下呗,对没有修改的行,做个row.acceptchanges()的操作不就行了。
      

  6.   

    如果是控件的问题,比如说它应该比较编辑前后的值是否一样从而Cacnel编辑操作,那就要在控件上动手,而不是DataSet。DataSet不应该负责这个职责,否则DataSet用于各种界面操作时它的行为变化就太大了。
      

  7.   

    对的,是用sqladapter,现在关键就是要判断DataRow是否修改,但是.net的RowState判断实际上是只要你对它进行复制操作它的RowState就为Modified,即使是很原值相同(红字部分未得到微软相关的证实,也未找到相关资料证实,但实际测试是这样的),而我判断数据是否改变的标准是只要新值和旧值的值内容相同即认为未修改,因为从数据角度来讲row[1]=row[1]这样的赋值操作不应该认为是数据修改
      

  8.   

    对啊,其实是一样的,因为我是比较赋值前的DataRow和赋值后的DataRow,关键是判断两个值内容是否相等
      

  9.   

    if (arrRow[i].ToString().Equals(arrRowNew[i].ToString()) == false)
    可以吗?
      

  10.   

    不能用ToString()方法,因为如果是引用类型就会出问题,比如byte[]类型,使用ToString方法后就变成了"System.Byte[]"
      

  11.   

    我觉得你这个需求应该自定义实体类来实现,DataRow的确有欠缺的地方,当赋值前,必须自己手动判断要赋的值与原来的值是否相等,相等则取消赋值操作。
      

  12.   

    有byte 之类的类型,那要分别处理了.....