在UI中删除GridView行时(通过其CommandName =“Delete”的LinkButton),视图不会自动刷新并继续显示已删除的行,直到我采取其他操作(手动刷新页面,导航和再回来等)。
在调试器中,我看到行已成功删除,并且RowDeleting和RowDeleted事件都会触发,但GridView的PreRender事件之后不会触发(相反,PreRender事件 触发时首先加载页面,添加新行时等。)
我在类似的配置中使用GridViews而没有这个问题,但我没有看到明显的差异。似乎该进程在PreRender事件之前中止,但没有抛出任何异常,并且在调试器中退出RowDeleted事件的末尾会将我带回UI,就像进程正常完成一样。
我应该寻找麻烦或解决方案的任何想法?其他可能相关的细节:GridView绑定到SqlDataSource;数据源不声明任何DeleteCommand;我通过在RowCommand处理程序中调用存储过程来处理删除,之后我用DataBind()重新绑定GridView,此时我可以看到GridView的Rows.Count减少了一个,正如我所期望的那样。通过RowDeleted事件,一切似乎都很好,然后......没有!
UPDATE:尝试在RowDeleting处理程序中调用SP删除而不是RowCommand处理程序...没有任何区别。该行仍然被删除,但处理终止而不调用GridView的PreRender,删除的行将保留显示,直到进一步的UI交互更新视图。
UPDATE2:我甚至没有得到Page的PreRender事件,该事件在控制PreRender事件之前。将继续向后工作,看看我是否能找到停止的地方,因为走出RowDeleted事件似乎是行的终点......
UPDATE3:我一直在寻找更多,虽然它使我的代码变得复杂,但我能够通过在GridView的SqlDataSource中声明一个只执行简单行(记录)删除的DeleteCommand来使事情正常工作,然后在RowDeleted处理程序调用我在存储过程中需要与主删除一起发生的其他内容。虽然在一个地方进行主要删除并且在另一个地方进行相关处理不太方便,但至少它是有效的。
但我不知道从中得出什么结论:正确的页面生命周期需要DeleteCommand?那个不应该在RowCommand处理程序的存储过程中删除?别的什么?我希望我能确定一下,特别是我最初的尝试被打破了......
答案 0 :(得分:0)
删除行后,只需将gridview与数据库中的新数据绑定。
答案 1 :(得分:0)
PreRender事件会在您其他网页上的回发中触发吗?关于this MSDN article的信息(在"服务器控件中的回发和非回发事件"标题,注释后的段落)让我想知道仅初始化和加载触发页面和所有子控件的事件。