Changer SqlDataSource.SelectCommand au moment de l'exécution des sauts de pagination
J'ai un GridView
lié à un SqlDataSource
avec une valeur par défaut SelectCommand
définie comme suit:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:MyConn %>"
ProviderName="MySql.Data.MySqlClient"
SelectCommand="select * from blah blah" />
Il y a des cas où j'ai du modifier cette requête dynamiquement à l'exécution, de sorte que je ne les suivants:
SqlDataSource1.SelectCommand = sql; //'sql' is the new query
GridView1.PageIndex = 0;
GridView1.EditIndex = -1;
GridView1.SelectedIndex = -1;
GridView1.DataBind();
updatePanel.Update();
Cela fonctionne bien, mais lorsque je clique sur la pagination des contrôles, le jeu de résultats par défaut de la SelectCommand
définis dans le SqlDataSource1
.
Moyen de contourner ce problème?
Grâce,
Marque
OriginalL'auteur Mark Richman | 2010-07-23
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que l'SqlDataSource est de se re-créé lors du chargement de la page lors de la soumission émis par le Pager de liens. Il n'y a rien à lui dire de charger ce que vous aviez fixé de manière dynamique. Si vous utilisez une procédure stockée avec des paramètres, puis ASP permettrait d'économiser de désactiver les paramètres de l'état d'affichage et de ré-exécuter le sélectionner dans la SqlDataSource lorsque la page est chargée.
Donc, ce que vous avez à faire est de dire à la le SqlDataSource ce qu'elle avait pour SQL lorsque ce dernier est chargé correctement.
La façon la plus simple de le faire est de stocker les requêtes SQL en état d'affichage lorsque vous définissez la SelectCommand de la SqlDataSource, puis extraire à nouveau dans l'événement Page_Load et le ramener.
Par exemple: disons que vous avez une zone de texte pour certains critères et d'un bouton de Recherche. Lorsque l'utilisateur saisit du texte dans la zone de texte, puis clique sur le bouton "Rechercher", vous voulez construire quelque SQL (Ce qui, par la manière, vous laisse avec une énorme exposition aux attaques par Injection SQL. Assurez-vous de frotter vos critères.) et puis définissez la SqlDataSource de la propriété SelectCommand. C'est un t ce point que vous voulez enregistrer off SQL. Puis dans l'événement Page_Load que vous souhaitez récupérer et définir la propriété SelectCommand à cette valeur.
En cliquant Sur votre bouton, vous pouvez stocker le SQL:
Puis dans l'événement Page_Load, vous pouvez extraire le SQL et définir la propriété SelectCommand:
Mike, vous avez raison à propos de l'injection SQL et je ne note que, dans la réponse originale. J'essayais simplement de répondre à la question qui a été posée. Je suis également d'accord que l'utilisation d'une procédure stockée avec des paramètres est la meilleure façon d'aller.
OriginalL'auteur dscarr
1) Essayez de définir la source de données à partir de l'aperçu de la page, pas dynamique. C'est le plus clair de solution
Si vous ne pouvez pas,
2) Essayez de générer la liste avant de page_load. Je pense plaçant le code sous page_init pourrait faire l'affaire. Je ne me souviens pas exactement à ce moment, mais il y a une méthode avant de page_load.
OriginalL'auteur rlee923