【问题标题】:GridView PreRender not firing after RowDeletedGridView PreRender 在 RowDeleted 后未触发
【发布时间】:2010-12-21 02:23:12
【问题描述】:

在 UI 中删除 GridView 行时(通过其 CommandName="Delete" 的 LinkBut​​ton),视图不会自动刷新并继续显示已删除的行,直到我采取其他操作(手动刷新页面、导航并离开再次回来,等等)。

在调试器中,我看到该行已成功删除,并且 RowDeleting 和 RowDeleted 事件都触发了,但是 GridView 的 PreRender 事件之后没有触发(相反,PreRender 事件确实在以下情况下触发首先加载页面,添加新行时等)。

我在类似的配置中使用过 GridViews,没有遇到这个问题,但我没有看到明显的差异。似乎该进程在 PreRender 事件之前中止,但没有引发异常,并且在调试器中退出 RowDeleted 事件的结尾让我回到 UI,就好像该进程正常完成一样。

我应该在哪里寻找问题或解决方案?其他可能相关的细节:GridView 绑定到 SqlDataSource;数据源未声明任何 DeleteCommand;我通过调用 RowCommand 处理程序中的存储过程来处理删除,然后我使用 DataBind() 重新绑定 GridView,此时我可以看到 GridView 的 Rows.Count 已按预期减少了 1。通过 RowDeleted 事件,一切似乎都很好,然后……什么都没有!

更新:尝试在 RowDeleting 处理程序而不是 RowCommand 处理程序中调用 SP 删除...没有任何区别。该行仍然被删除,但处理终止而不调用 GridView 的 PreRender,并且被删除的行一直显示,直到一些进一步的 UI 交互更新视图。

UPDATE2:我什至没有收到页面的 PreRender 事件,该事件先于控件 PreRender 事件。将继续向后工作,看看我是否能找到事情停止的地方,因为退出 RowDeleted 事件似乎已经结束了......

UPDATE3:我一直在探索更多内容,虽然它使我的代码复杂化,但我能够通过在 GridView 的 SqlDataSource 中声明一个 DeleteCommand 来使事情正常工作,它只是执行简单的行(记录)删除,然后在RowDeleted 处理程序调用我在存储过程中需要与主要删除一起发生的其他内容。虽然在一个地方进行主要删除并在另一个地方进行相关处理不太方便,但至少它可以工作。

但我不知道从中得出什么结论:正确的页面生命周期需要 DeleteCommand 吗?不应该在 RowCommand 处理程序的存储过程中进行删除?别的东西?我希望我能确定我最初尝试的具体问题是什么……

【问题讨论】:

    标签: asp.net gridview prerender rowdeleting


    【解决方案1】:

    删除行后,只需将gridview与数据库中的新数据绑定即可。

    【讨论】:

    • 正如我所说(在我公认的冗长的初始帖子中),我 确实 在删除后在网格上调用 DataBind() ......正如我也说过的,我知道重新绑定是成功的,因为我看到 gridview 的行数减少了 1。但这似乎都不能确保 UI 得到更新......
    【解决方案2】:

    PreRender 事件是否会在您其他页面上的回发时触发? this MSDN article 的信息(在“服务器控件中的回发和非回发事件”标题下,注释后的段落)让我想知道是否仅页面和所有的 Init 和 Load 事件触发子控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2012-01-01
      • 2015-11-04
      相关资源
      最近更新 更多