ASP.NET Réglage de paramètre pour SqlDataSource par programme ne fonctionne pas pour publication

Je veux définir un paramètre pour un SqlDataSource par programmation comme décrit dans l'Étape 5 à http://www.asp.net/data-access/tutorials/using-parameterized-queries-with-the-sqldatasource-vb . Aussi un GridView est lié à la sqlDataSource. Mon langage est:

<asp:SqlDataSource ID="mySqlDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionStringHTL %>" 
    SelectCommand="SELECT [subscription_con] FROM [HTL_CONSUME_CON] WHERE ([subscription_con] = @subscription_con)">
    <SelectParameters>
        <asp:Parameter Name="subscription_con" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="myGridView" runat="server" AllowPaging="True" 
    AllowSorting="True" DataSourceID="mySqlDataSource">
</asp:GridView>

Dans le code-behind, j'ai:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    
    mySqlDataSource.SelectParameters("subscription_con").DefaultValue = calcResult()
End Sub

La valeur de retour de valeur du type énuméré calcresult() est différent pour chaque publication. La publication se produit lorsque l'utilisateur clique sur un Bouton dans le formulaire qui a UseSubmitBehavior=True.

J'ai utiliser le débogueur pour parcourir le code derrière et je vois qu'il a exécuté pour chaque chargement de la page et je vois les valeurs attendues retourné à partir de clacResult().

Cependant le DataGrid lié n'est jamais mis à jour sur les publications, il met à jour uniquement sur la première page de la charge.

Si je change le SqlDataSource paramètre d'avoir un contrôle de la source, puis il travaille sur les publications. Dans otherwords, j'ai changé la balise à utiliser:

<asp:ControlParameter ControlID="myTextBox" Name="subscription_con" PropertyName="Text" Type="Int32" />

et j'ai changé le code derrière:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    
   myTextBox.Text = calcResult()
End Sub

Avec le contrôle de zone de texte comme la source de la SqlDataSource paramètre, mise à jour de la GridView travaille pour la page d'origine de la charge et toutes les publications. Cependant, je n'ai vraiment pas besoin pour la zone de texte et préfère ne pas l'utiliser.

Que suis-je en manquant sur la façon de définir un paramètre par programme pour un SqlDataSource? Pourquoi n'est-il pas lié à GridView obtenir des mises à jour sur les publications lors de la configuration de la SqlDataSource paramètre par programme lorsqu'il n'y a pas de contrôle de la source?

OriginalL'auteur harrije | 2010-06-04