我想以编程方式为 SqlDataSource 设置参数,如http://www.asp.net/data-access/tutorials/using-parameterized-queries-with-the-sqldatasource-vb的步骤 5 中所述。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 设置参数,我缺少什么?为什么在没有控制源的情况下以编程方式设置 SqlDataSource 参数时,绑定的 GridView 不会在回发时更新?