Tho*_*ton 1 .net vb.net datatable
我有一个数据表,并且正在实现一项功能,该功能可以告诉应用程序中的数据表自从数据库加载以来是否未曾更改。
例如,没有添加行,没有编辑行,没有删除行,因为它是从数据库加载的(我不关心数据库中数据更改且未反映在我的数据表中的情况)
我实现了这样的事情:
'DataTable clean means it has not been changed
Public ReadOnly Property DataTableClean As Boolean
Get
Dim Clean As Boolean = True
For i = 0 To DataTable.Rows.Count - 1
If DataTable.Rows(i).RowState <> DataRowState.Unchanged Then
Clean = False
Exit For
End If
Next
Return Clean
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
这段代码完成了这项工作,但如果数据表包含大量行,我对性能不太满意。
有谁知道是否有一个标志表明数据表是否已更改?
谢谢。
我知道避免昂贵的循环并跟踪数据表更改的唯一方法(即使在调用 AcceptChanges 的情况下)是为RowChanged和 RowDeleted 事件设置事件处理程序。
当您收到这些事件时,您可以设置一个类级别布尔变量来保持 Clean 状态。
Private Boolean Clean = True
Public Sub AddChangedTrackStatus(dt as DataTable)
AddHandler dt.RowChanged, AddressOf ChangeEvent
AddHandler dt.RowDeleted, AddressOf ChangeEvent
Clean = True
End Sub
Private Sub ChangeEvent(sender as Object, args as DataRowChangeEventArgs)
Clean = False
End Sub
Public ReadOnly Property DataTableClean As Boolean
Get
Return Clean
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
但这仍然存在问题,因为这里我们一次跟踪一个表,如果您想要一个通用解决方案一次跟踪多个表,那么您需要在此类中添加某种集合管理(私有列表、添加/删除)。并且不要忘记在更新数据库时重置 Clean 变量。
| 归档时间: |
|
| 查看次数: |
6151 次 |
| 最近记录: |