【问题标题】:When is DataBind called automatically on an ASP.NET page?什么时候在 ASP.NET 页面上自动调用 DataBind?
【发布时间】:2012-03-07 17:13:50
【问题描述】:

我在带有搜索按钮的页面上有一个 GridView。 GridView 一开始是不可见的,因此用户必须在检索结果之前单击搜索。 DataSourceID 设置为 ObjectDataSource 的 ID。调用 click 时,会从 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?

【问题讨论】:

    标签: asp.net data-binding gridview objectdatasource


    【解决方案1】:

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

    数据绑定

    在控件的 PreRender 事件之后引发,该事件发生在 页面的 PreRender 事件。 (这适用于其 DataSourceID 的控件 属性以声明方式设置。否则事件发生在你 调用控件的 DataBind 方法。)

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

    source

    【讨论】:

    • 好的。但是为什么从Page_Load调用DataBind时调用了两次,而从按钮单击调用时只调用了一次呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2010-09-25
    • 2012-09-08
    • 2010-12-18
    相关资源
    最近更新 更多