ASP.NET GridView.DataBind没有刷新GridView

时间:2010-02-13 02:08:15

标签: c# asp.net gridview data-binding

开始我正在使用MultiView控件来引导用户进行搜索。 MultiView中的第一页只是一个搜索框,其中包含一个用于执行搜索的按钮。

第二页有GridView,但我想保留搜索框和按钮,供用户再次搜索,如果他们找不到他们正在寻找的用户。

当您从第一页搜索并转到第2页时,GridView会显示正确的结果。但是当它在GridView和搜索的第二页上时,GridView不会更新。以下是我正在使用的代码。

//GridView = SearchResults  
//SqlDataSource = AddPlayerDataSource  
//MultiView = PlayerSearchView

protected void PlayerSearch_Click(object sender, ImageClickEventArgs e)
{
    string userId = User.Identity.Name.ToString();

    if (SearchText.Text != "" && !userId.Equals(""))
    {
        GridView SearchResults = (GridView)PlayerSearchView.FindControl("SearchResults");

        string SqlSelect = "SELECT [id], [username] FROM [users] WHERE [username] LIKE '%" + SearchText.Text + "%'";
        AddPlayerDataSource.SelectCommand = SqlSelect;
        SearchResults.DataBind();

         if (PlayerSearchView.ActiveViewIndex != 1)
             PlayerSearchView.ActiveViewIndex = 1;
    }
}

2 个答案:

答案 0 :(得分:3)

您需要设置DataSource属性吗?您在代码上方的注释中设置了这一组,但目前还不清楚何时发生这种情况。在SearchResults.DataBind()上放置一个断点,并确保在这里正确设置了所有属性。

顺便说一句......这些问题是为什么使用适当的业务逻辑层无限优先的原因。如果您正在控制实际执行数据库查询的代码,您可能没有遇到此问题或确切知道它在哪里。

GridView SearchResults = (GridView)PlayerSearchView.FindControl("SearchResults");
SearchResults.DataSource = Data.Players.LoadAll(); //Loads a DataTable with your data
SearchResults.DataBind();

修改 如果删除MultiView,一切都按照预期的方式工作吗?让我们缩小问题范围。

答案 1 :(得分:0)

不是声明新的gridview“SearchResults”然后在gridview的阴影副本上调用数据绑定,而是在视图本身中对gridview进行数据绑定。

致电

((GridView)PlayerSearchView.FindControl("SearchResults")).DataBind()

而不是

SearchResults.DataBind();

然后你可以摆脱

GridView SearchResults = (GridView)PlayerSearchView.FindControl("SearchResults");

这样,当数据绑定现有的gridview而不是副本时,你的SqlDataSource控件将执行select()。