2009-07-28 12 views
0

J'utilise un SqlDataSource et pour éviter d'écrire de longues requêtes directement dans mon code, j'ai pensé que je pourrais créer une classe Query qui renvoie la requête que je veux sous forme de chaîne. J'ai essayé le code ci-dessous, mais je viens d'obtenir "Les balises de serveur ne peuvent pas contenir <% ...%> constructions." Avant que j'utilise des procédures stockées, mais mon hébergement ne le permet pas, alors quand j'ai pensé à la solution de classe Query. Je dois aussi ajouter que je ne veux pas faire de liaison de données dans codebehind.SqlDataSource set SelectCommand dynamicly

Existe-t-il une façon de procéder?

<asp:SqlDataSource ID="DS" 
     runat="server" 
     DataSourceMode="DataSet" 
     ConnectionString="<%$ ConnectionStrings:conn %>" 
     ProviderName="MySql.Data.MySqlClient" 
     SelectCommand="<% Query.getTestQuery() %>" 
     > 
    </asp:SqlDataSource> 

Répondre

0

Peut-être utiliser un ObjectDataSource. Ainsi, à l'intérieur de votre objet, vous pourrez y faire votre requête dynamique.

Sinon, vous pouvez modifier la commande SelectCommand pendant l'événement SqlDataSource Selecting dans votre code-behind. Ensuite, vous pouvez changer la SelectCommand à ce que vous voulez.

1

Il n'est pas possible de le faire dans ASP.NET. Le code dans les balises <% %> est pour exécuter du code arbitraire, pas pour définir des valeurs de propriété. Le code dans <%= %> est utilisé pour le rendu dans le flux de sortie. Le code au <%# %> est pour la liaison de données, ce qui est similaire à ce que vous essayez d'accomplir, mais ce n'est pas la même chose. Le code dans <%$ %> est pour les liaisons d'expression, mais elles s'exécutent trop tôt dans le cycle de vie de la page et sont donc peu susceptibles de fonctionner dans votre scénario. L'utilisation de ObjectDataSource est une façon d'aller ici car à ce stade, c'est juste du code, et votre code peut faire ce qu'il veut en fonction de l'état de la page.

L'utilisation d'une SqlDataSource dérivée est une autre option. Créez un contrôle qui dérive de SqlDataSource et remplace sa méthode OnInit. Dans la méthode OnInit, vous pouvez définir dynamiquement la commande SelectCommand pour faire ce que vous voulez en fonction de l'état de la page.