【问题标题】:Updating Only Changed Rows Using GridView Control使用 GridView 控件仅更新更改的行
【发布时间】:2011-02-09 19:13:23
【问题描述】:

使用 gridview 仅将更改的行更新到 db 的最佳方法是什么?

我有一个具有内联编辑功能的 gridview 控件,当用户编辑行时,有两个选项“更新”或“取消”,因此用户可能只是单击更新按钮而不真正更新行...

我怎样才能确定,用户真的改变了行?

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    我用的不多,但是如果您使用内置的编辑功能,您确定 GridView 不会自动处理它。您可以尝试调试 OnRowUpdated 和 OnRowUpdating 方法,看看它们是否在单击保存时被调用并且没有任何更改。即使您不需要它们,也只需添加它们,这样您就可以在此处设置一个断点以查看它们是否被触发。

    【讨论】:

    • 是的,我确实有 onRowUpdating 事件,当我点击它时确实会调用,但我的问题是,如果你捕捉到那个事件(OnRowUpdating),那是否为时已晚,无法知道原始值与更改值是多少?同意吗?
    • 如果我的理解是正确的,“OnRowUpdating”是在事实之前。因此,如果您需要在保存到数据库之前修改用户输入,您可以这样做。 “OnRowUpdated”是事后的,所以如果在它保存之后你想要基于新值的东西,你可以在那里。添加一个 onRowUpdated 处理程序,并查看在没有信息更改时是否调用它。
    • 参见此处:msdn.microsoft.com/en-us/library/… 还要注意文档中的“NewValues”和“OldValues”,它们可以让您检查更改。
    • 好的,所以我调试并在 onRowUpdating 事件中得到我在我的案例 textbox.text 值中更新的内容......但我想要的是原始值。
    • 该方法的事件参数应该是 GridViewUpdateEventArgs 所以如果你有 OnRowUpdating(object sender, GridViewUpdateEventArgs e) 那么你可以这样做: bool changed=false; for(int i = 0; i
    【解决方案2】:

    我找不到我想做的事情,所以最简单的方法是:

    将数据加载到对象中并与Equals 进行比较,它在我的场景中运行良好,唯一的缺点是访问 db,这在我的情况下很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多