ASP.NET GridView.DataBind pas l'actualisation de la GridView
Pour commencer je suis en utilisant un contrôle MultiView à l'étape utilisateurs par le biais de la recherche. La première page dans le MultiView est juste une zone de recherche avec un bouton pour exécuter la recherche.
La deuxième page a la GridView, mais je tiens à garder la zone de recherche et un bouton de l'utilisateur à la recherche de nouveau si ils n'ont pas trouver l'utilisateur qu'ils ont été recherchez.
Lorsque vous effectuez une recherche à partir de la page et passer à la page 2 de la GridView montre les résultats corrects. Mais quand il est sur la deuxième page, avec à la fois le contrôle GridView et de la recherche, de la GridView n'est pas mise à jour. Ci-dessous le code que j'utilise.
//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;
}
}
Si une procédure stockée ou SQL directe est utilisée fait pas de différence ici. C'est l'ASP.NET la liaison de données qui n'est pas le cas.
désolé mon anglais, ce que je voulais dire, c'est qu'il m'est arrivé, et après j'ai cherché sur google j'ai trouvé beaucoup de gens avec le même problème et se fixe à l'aide d'une procédure stockée et n'a donc I. c'est pourquoi j'ai suggéré d'utiliser une procédure stockée.
Tout comme une note de côté... ce code ressemble à une attaque par injection SQL en attente de se produire.
Oui, c'est fait, j'ai inclus le SQL de cette façon, pour plus de clarté.
OriginalL'auteur jWoose | 2010-02-13
Vous devez vous connecter pour publier un commentaire.
Faire, vous devez définir la propriété DataSource? Vous avez que défini dans les commentaires ci-dessus le code, mais on ne sait pas quand cela se passe. Placer un point d'arrêt sur SearchResults.DataBind() et assurez-vous que toutes les propriétés sont définies correctement ici.
D'ailleurs... ces types de problèmes sont pourquoi il est infiniment préférable d'utiliser une bonne couche de logique métier. Si vous étiez en train de contrôler le code qui en fait ne l'DB requête vous avais pas eu ce problème ou sait exactement où il était.
EDIT:
Fait tout ce travail de la manière que vous attendez si vous supprimez le MultiView? Nous allons réduire le problème.
L'avantage est que le LoadAll() est en fait de faire du SQL/couche de données d'appel. Exactement la partie que vous êtes absent. Pouvez-vous la force AddPlayerDataSource pour recharger manuellement à l'appel à Select()? Je ne suis pas trop familier avec cet objet.
Je vous remercie. J'avais été à la recherche sur le problème depuis trop longtemps. Le MultiView se cachait le vrai problème de moi. J'ai eu des problèmes avec la zone de texte de recherche.
Pour être plus précis je pensais que la zone de texte de recherche et le bouton ont été à l'extérieur de l'affichage multi-vues, mais je les avais mis à l'intérieur de l'affichage multi-vues. Le résultat final a été de 2 différentes zones de texte. Faute d'inattention merci à tous pour l'aide.
OriginalL'auteur Bryan
Au lieu de déclarer une nouvelle gridview "SearchResults" et en appelant ensuite databind sur ce cliché instantané de votre gridview, juste databind le contrôle gridview dans la vue elle-même.
Appelez simplement
((GridView)PlayerSearchView.FindControl("SearchResults")).DataBind()
au lieu de
SearchResults.DataBind();
Alors vous pouvez vous débarrasser de
GridView SearchResults = (GridView)PlayerSearchView.FindControl("SearchResults");
De cette façon, votre contrôle SqlDataSource va exécuter la sélection() lors de la liaison de données existantes gridview, pas la copie.
OriginalL'auteur Drell