从数据库把数据读到DataTableA中,同时COPY到DataTableB中
然后把DataTableA绑定到DataGrid上,进行编辑
当我点击登录的时候
判断这时的DataTableA和以前的DataTableA(也就是DataTableB)是否相同有个问题就是,刚COPY完的时候,我做了下测试DataTableA.equals(DataTableA) trueDataTableA.equals(DataTableB) false我不太明白了,COPY方法是同时把数据和结构一起考过了的,怎么会不一样呢明白人给解释下吧应该怎么去判断两个数据表的差异,表的字段有很多,我现在的有16个
有什么好的方法吗

解决方案 »

  1.   

    http://topic.csdn.net/u/20090325/10/f1c61a7c-6cc6-4d9f-b6ec-cfab5839d960.html?seed=1228550270
      

  2.   

     Equals 的默认实现支持引用相等性(对于引用类型)和按位相等性(对于值类型)。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。请注意,派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值,即使它们具有不同的二进制表示形式也是如此。例如,请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。Decimal 对象不具有按位相等性,因为它们具有不同的二进制表示形式,因此会考虑不同数量的尾随零。但是,这些对象具有值相等性,因为在进行比较时尾随零无关紧要,数字 1.10 和 1.1000 被视为相等。 
      

  3.   

    C# codepublic static bool IsSame(DataTable dt1, DataTable dt2)
        {
            DataTable dt3 = new DataTable();
            dt3.Merge(dt1);
            dt3.AcceptChanges();        dt3.Merge(dt2);
            DataTable dt4 = dt3.GetChanges();
            return dt4 == null || dt4.Rows.Count == 0;
        }
    DataTable没有Merge方法~~~~~~~~
      

  4.   

    private bool  ValueEquals(DataTable objA,DataTable objB)
        {
            if(objA != null && objB != null)
            {
                  if(objA.Rows.Count != objB.Rows.Count)
                  {
                      return false;
                  }              if(objA.Columns.Count != objB.Columns.Count)
                  {
                      return false;
                  }
            }
            DataView dv = new DataView(objB);
            string keys = "";
            foreach(DataColumn col in  objA.Columns)
            {
                   keys += ","+col.ColumnName;
            }
            dv.Sort = keys.Substring(1);
            foreach(DataRow row in  objA.Rows)
            {
                   if(row.RowState != DataRowState.Deleted)
                   {
                       if(dv.Find(row.ItemArray)<0)
                       {
                              return false;
                       }
                   }
                   else
                   {
                       return false;
                   }
            }
            return true;
        }
    参考
      

  5.   

    equals()是比较引用类型是否有相同的引用,DataTableA和DataTableB是DataTable类的两个不同的事例,在内存中的地址肯定是不同的,所以用Equals()比较肯定返回false