ASP.NET GridView.DataBind не обновляет GridView - PullRequest
4 голосов
/ 13 февраля 2010

Для начала я использую элемент управления MultiView для пошагового поиска пользователей. Первая страница в MultiView - это просто окно поиска с кнопкой для предварительного поиска.

На второй странице есть GridView, но я бы хотел оставить окно поиска и кнопку для повторного поиска пользователя, если он не нашел нужного ему пользователя.

При поиске со страницы 1 и переходе на страницу 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 ]

3 голосов
/ 14 февраля 2010

Вам нужно установить свойство DataSource? У вас есть этот набор в комментариях над кодом, но неясно, когда это происходит. Установите точку останова на SearchResults.DataBind () и убедитесь, что все свойства установлены здесь правильно.

Между прочим ... из-за таких проблем бесконечно предпочтительнее использовать правильный уровень бизнес-логики. Если бы вы управляли кодом, который фактически выполняет запрос к БД, у вас не было бы этой проблемы или вы точно знали, где она была.

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

EDIT: Все ли работает так, как вы ожидаете, если вы удалите MultiView? Давайте сузим проблему.

0 голосов
/ 13 февраля 2010

Вместо объявления нового вида сетки «SearchResults» и последующего вызова привязки данных к этой теневой копии вашего вида сетки, просто укажите данные в виде сетки в самом представлении.

Просто позвоните

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

вместо

SearchResults.DataBind();

Тогда вы можете избавиться от

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

Таким образом, ваш элемент управления SqlDataSource будет выполнять select () при привязке базы данных к существующему представлению сетки, а не к копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...