ASP.NET以编程方式为SqlDataSource设置参数不适用于回发

ASP.NET以编程方式为SqlDataSource设置参数不适用于回发,asp.net,gridview,sqldatasource,Asp.net,Gridview,Sqldatasource,我想以编程方式为SqlDataSource设置一个参数,如第5步中所述。GridView也绑定到sqlDataSource。我的标记是: <asp:SqlDataSource ID="mySqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringHTL %>" SelectCommand="SELECT [subscription_con] FR

我想以编程方式为SqlDataSource设置一个参数,如第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>
每次回发时,calcResult()的返回值都不同。当用户单击表单上使用SubmitBehavior=True的按钮时,会发生回发

我已经使用调试器逐步检查了隐藏的代码,我看到它针对每个页面加载执行,并且看到从clacResult()返回的预期值

但是,绑定的DataGrid在回发时从不更新,它只在第一次页面加载时更新

如果我将SqlDataSource参数更改为使用一个控件作为源,那么它可以在回发上工作。换句话说,我将标记更改为使用:

<asp:ControlParameter ControlID="myTextBox" Name="subscription_con" PropertyName="Text" Type="Int32" />
使用TextBox控件作为SqlDataSource参数的源,GridView的更新适用于原始页面加载和所有回发。然而,我真的不需要文本框,我宁愿不使用它


关于如何以编程方式为SqlDataSource设置参数,我缺少什么?在没有控制源的情况下,以编程方式设置SqlDataSource参数时,为什么绑定的GridView在回发时没有得到更新?

在回发时可能需要一个解释性的数据库:

if (Page.IsPostBack)
{
    grid.DataBind();
}
应该这样做。

C#


贪婪的网络。

我收回它,它确实起了作用。我昨天刚试的时候一定是做错了什么。谢谢这解决了我的几个问题。非常感谢你
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    
   myTextBox.Text = calcResult()
End Sub
if (Page.IsPostBack)
{
    grid.DataBind();
}
SqlDataSource1.SelectParameters["Where_Clause"] = new Parameter() { Name = "Where_Clause", DefaultValue = "WHERE m.Id = 1" };