Gridview在OnRowUpdating方法中获取原始值

本文关键字:获取 原始 方法 OnRowUpdating Gridview | 更新日期: 2023-09-27 17:57:35

我没有将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字段的原始值,但我显然不想将每一列都设置为数据键。

Gridview在OnRowUpdating方法中获取原始值

假设GetSortedDepartments()方法返回一个Datatable。您可以将这个数据表放在会话中(例如),并在UpdateRow方法中使用当前行的Datakey从这个数据表中获取旧值。不要忘记更新数据表,并在一行更新后将其重新放入会话中。