开始我正在使用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;
}
}
答案 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()。