ASP.NET GridView.DataBind 不刷新 GridView

jWo*_*ose 5 c# asp.net data-binding gridview

首先,我使用 MultiView 控件来引导用户进行搜索。MultiView 中的第一页只是一个搜索框,其中有一个用于执行搜索的按钮。

第二页有 GridView,但我想保留搜索框和按钮,以便用户在找不到所需的用户时再次搜索。

当您从第一页搜索并移至第二页时,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Bry*_*yan 3

是否需要设置DataSource属性?您已在代码上方的注释中设置了该设置,但尚不清楚何时发生。在 SearchResults.DataBind() 上放置一个断点,并确保所有属性都在此处正确设置。

顺便说一句......这些问题就是为什么使用适当的业务逻辑层是无限可取的。如果您控制实际执行数据库查询的代码,您要么不会遇到此问题,要么确切地知道它在哪里。

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

编辑: 如果删除多视图,一切都会按照您期望的方式工作吗?让我们缩小问题范围。