我有一个GridView绑定到ObjectDataSource。我看到,SelectMethod和SelectCountMethod被触发两次。 在GridView RowDataBound中,我有gv.ShowFooter = false; 当我评论这一行时,事件只会触发一次。为什么会发生?如何解决它?我不明白,为什么隐藏数据绑定控件结果中的一个元素是重新绑定ObjectDataSource?ObjectDataSource + GridView =触发两次
0
A
回答
0
RowDataBound
当GridView获取数据绑定时(表示触发SelectMethod),会触发事件。
现在,切换属性如ShowFooter
需要网格重新创建行,这意味着再次绑定数据。这就是为什么对象数据源会再次被触发的原因。
解决方法是先设置ShowFooter属性(而不是RowDataBound)。如果这不可行,那么将对象数据源类中的逻辑放到缓存数据中,这样就不必访问数据存储两次。例如,
// Code Behind Class
public partial class MyPage : System.Web.UI.Page
{
private object _data;
public static object SelectData()
{
// get the current page instance
var page = HttpContext.Current.CurrentHandler as MyPage;
if (null != page._data)
{
return page._data;
}
// logic to retrieve the data
...
_data = ...
return _data;
}
...
private void RefreshGrid()
{
_data = null; // force the data-source to go to database again
grid.DataBind();
}
}
声明:仅用于说明目的的未测试的代码
所以,在上面的代码中,对页代码隐藏用于获取数据的静态方法。并且页面类中的局部变量用于缓存数据。另请注意,如果要刷新网格,则可能需要先在网格上调用DataBind方法之前清除该变量。
相关问题
- 1. SystemEvents.TimeChanged触发两次
- 2. addEventListener触发两次
- 3. 'onbeforeunload'两次触发
- 4. switchstatement触发两次
- 5. SDL_KEYDOWN触发两次
- 6. Rowdatabind gridview发射两次
- 7. Focusout被触发两次
- 8. CLIC触发两次Vue.js
- 9. JSlider事件触发两次
- 10. Java:myComboBoxItemStateChanged被触发两次?
- 11. ajax后触发两次
- 12. Django pre_save被触发两次
- 13. jQTouch事件两次触发
- 14. webkitTransitionEnd eventListener触发两次
- 15. Silverlight NumericUpDown ValueChanging两次触发
- 16. 回调被触发两次
- 17. Slideout Bug触发两次
- 18. Firebase onMessageReceived会触发两次
- 19. 两次同时触发
- 20. GridView和ObjectDataSource问题
- 21. ActivatedRoute paramMap observable发射值两次/触发两次 - Angular 4
- 22. 避免发布两次? gridview控件
- 23. 调试GridView/ObjectDataSource事件
- 24. Gridview ObjectDataSource InvalidOperationException当删除
- 25. Gridview如何与ObjectDataSource协作?
- 26. GridView中的ObjectDataSource和DeleteMethod
- 27. ObjectDataSource引发异常
- 28. 为什么jQuery触发两次触发器?
- 29. 不知道为什么触发事件触发两次
- 30. 可安装onEdit触发器触发两次Google Apps脚本