我没有将我的Gridview DataSource设置为像SqlDataSource或ObjectDataSource这样的控件 相反,我使用我写的方法在后面的代码中手动绑定:
protected void Bind()
{
CustomDepartmentGV.DataSource = GetSortedDepartments();
CustomDepartmentGV.DataBind();
}
我也通过Gridview属性手动处理更新:
OnRowUpdating="UpdateRow"
后面代码中的UpdateRow方法的简化版本:
protected void UpdateRow(object sender, GridViewUpdateEventArgs e)
{
var oldValues = e.OldValues;
}
当我运行上面的代码时,oldValues变量被设置为System.Collections.Specialized.OrderedDictionary类,但其中的键和值集合具有0个键/值。
在研究了这一点后,我发现了一些帖子,说除非你将Gridview DataSource设置为像SqlDataSource或ObjectDataSource这样的控件,否则不会设置e.OldValues。我不想使用这些,因为我喜欢它让我在击中数据访问层对象之前在代码中编写自己的方法的灵活性。
有谁知道如何让e.OldValues工作或提供替代方案,以便我可以查看UpdateRow方法中正在更新的行的原始值?
注意 的 我能够获取Gridview DataKey字段的原始值,但我显然不希望将每列设置为数据键。
答案 0 :(得分:1)
假设GetSortedDepartments()方法返回一个Datatable。您可以将此数据表放在会话中(例如),并在UpdateRow方法中使用当前行的Datakey来从此数据表中获取旧值。 不要忘记更新数据表,并在更新行后再次将其放入会话中。