Я хочу установить параметр для SqlDataSource программно, как описано в шаге 5 на http://www.asp.net/data-access/tutorials/using-parameterized-queries-with-the-sqldatasource-vb. Также GridView связан с sqlDataSource. Моя разметка:
<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>
В коде у меня есть:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
mySqlDataSource.SelectParameters("subscription_con").DefaultValue = calcResult()
End Sub
Возвращаемое значение calcResult () отличается для каждого постбэка. Обратная передача происходит, когда пользователь нажимает кнопку в форме, которая имеет UseSubmitBehavior = True.
Я использую отладчик для пошагового выполнения кода, и я вижу, что он выполняется для каждой загрузки страницы, и я вижу ожидаемые значения, возвращаемые из clacResult ().
Однако привязанный DataGrid никогда не обновляется на обратных передачах, он обновляется только при первой загрузке страницы.
Если я изменю параметр SqlDataSource на элемент управления в качестве источника, он будет работать с обратными передачами. Другими словами, я изменил разметку, чтобы использовать:
<asp:ControlParameter ControlID="myTextBox" Name="subscription_con" PropertyName="Text" Type="Int32" />
и я изменил код так:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
myTextBox.Text = calcResult()
End Sub
При использовании элемента управления TextBox в качестве источника параметра SqlDataSource обновление GridView работает для загрузки исходной страницы и всех обратных передач. Тем не менее, я действительно не нуждаюсь в TextBox и предпочел бы не использовать его.
Что мне не хватает, как программно установить параметр для SqlDataSource? Почему связанный GridView не обновляется для обратных передач при программной установке параметра SqlDataSource, когда нет источника управления?