DataBind何时在ASP.NET页面上自动调用?

时间:2012-03-07 17:13:50

标签: asp.net data-binding gridview objectdatasource

我在带有搜索按钮的页面上有一个GridView。 GridView在开始时不可见,因此用户必须在检索结果之前单击搜索。 DataSourceID设置为ObjectDataSource的ID。调用click时,将从单击处理程序调用以下方法:

private void PopulateGrid()
{
    gv.Visible = true;
    gv.DataBind();
}

从Page_Load处理程序调用相同的方法时出现问题。我们在会话中存储用户的搜索词,并在第一次访问页面时检索它们,如下所示:

if(!PostBack && Session["search"] != null)
{
   SetSearchFromSession();
   PopulateGrid();
}

这种情况下的问题是ObjectDataSource的Selecting事件被触发两次。一旦GridView变为可见,并且再次调用DataBind()时。我通过替换gv.Visible = true来解决这个问题。对于Page_Load中的PopulateGrid();

但我想了解发生了什么。当按钮单击事件中的调用没有时,为什么在页面加载时设置GridView会导致DataBinding?

1 个答案:

答案 0 :(得分:1)

如果以声明方式设置datasourceid,那么它将在PreRender之后调用,如果调用DataBind,它将再次被调用。 (两次)

  

DataBinding

     

在控制的PreRender事件之后发生,该事件发生在之后   page的PreRender活动。 (这适用于DataSourceID的控件   属性以声明方式设置。否则事件发生在你身上   调用控件的DataBind方法。)

     

此事件标记绑定控件的进程的开始   对数据。如果,请使用此事件手动打开数据库连接   必需,并在查询之前动态设置参数值   运行

source