我有一个绑定到ObjectDataSource的GridView。我明白了,SelectMethod和SelectCountMethod被触发了两次。 在GridView RowDataBound中我有gv.ShowFooter = false; 当我评论这一行时,事件只发生一次。为什么会这样?如何解决它?我不明白,为什么在数据绑定控件结果中隐藏一个元素是重新绑定ObjectDataSource?
答案 0 :(得分:0)
RowDataBound
事件。
现在,切换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方法之前清除变量。