前面我们提到,数据绑定控件把传递给数据源的值存放在相互独立的Keys、Values(新值)和 OldValues字典中。在默认情况下,SqlDataSource和ObjectDataSource会忽略OldValues字段,只使用Keys和Values。这种行为是由数据源的ConflictDetection属性检测的,在默认情况下这个属性的值被设置为OverwriteChanges。OverwriteChanges模式意味着"为了更新或删除记录,仅仅匹配主键值"。这种操作意味着,记录的更新或删除是不考虑该记录的下层值是否改变过了。在通常情况下,理想的状态是,只有当数据行的值与最初选择的值完全匹配的时候,才让Update或Delete操作成功。在这种理想情况下,如果另外一个用户在你选择某一行和更新该行的之间也更新了这一行,你的更新操作就会失败。通过把ConflictDetection属性设置为CompareAllValues,数据源也支持这种操作。在这种模式下,数据源会把OldValues应用到命令或方法上,它会使用这些值来确保在更新或删除记录之前,更新或删除操作必须与记录的所有值都匹配。你还必须把OldValuesParameterFormatString属性设置为一个有效的.NET框架组件格式化字符串(例如"original_{0}"),来指明OldValues和Keys字典中的参数如何重新命名以便与NewValues参数区分开来。