DataGridView使用VirtualMode时数据是否变更的判断
如果数据是DBList类型,则可以直接调用DBList类的submitRequird方法来判断,数据是否变更
如果不是DBList类型,但是数据类是从EntityBase继承的子类,则可以循环判断,数据类的数据状态是否有变更,如
pList.Exists(p => p.mRowState == System.Data.DataRowState.Added || p.mRowState == System.Data.DataRowState.Modified);
如果即不是DBList类型,数据类也不是从EntityBase继承的子类,则可以通过判断hashCode来判断数据是否变更,
如数据量较少,少于千行,则可以用比较到位的Hash判断,累加字段的hash值
Dim pHash As Int64
If (pList.Count = 0) Then
pHash = pList.GetHashCode()
Else
For Each p1 As JOActiveLPModule In _ActiveLPModuleList
pHash += p1.mLevel.GetHashCode()
pHash += p1.mLP.GetHashCode()
If (Not String.IsNullOrEmpty(p1.mRemark)) Then
pHash += p1.mRemark.GetHashCode()
End If
Next
End If
Return pHash
如果数据量多,则可以累加行的Hash值,但仅仅行的hash值,对于行内细小的字段变化,可能无法精确判断是否变更,此时要结合事件cellBeginEdit和cellEndEdit或其他事件来判断前后值的变化,
或者在RowEnter和SelectRowChanged事件前后,计算当前行的字段Hash值是否变化来判断
VirtualMode时,推荐在CellValuePushed事件中用计算hash值的方式来判断值是否变化