DotNet · 2022年5月15日

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值的方式来判断值是否变化

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞