【问题标题】:ASP.NET Setting parameter for SqlDataSource programatically does not work for postbackSqlDataSource 的 ASP.NET 设置参数以编程方式不适用于回发
【发布时间】:2011-02-27 20:11:34
【问题描述】:

我想按照http://www.asp.net/data-access/tutorials/using-parameterized-queries-with-the-sqldatasource-vb 的步骤 5 中所述以编程方式为 SqlDataSource 设置一个参数。 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 在回发时没有得到更新?

【问题讨论】:

    标签: asp.net gridview sqldatasource


    【解决方案1】:

    C#

    SqlDataSource1.SelectParameters["Where_Clause"] = new Parameter() { Name = "Where_Clause", DefaultValue = "WHERE m.Id = 1" };
    

    贪婪网络。

    【讨论】:

      【解决方案2】:

      您可能需要一个明确的回发数据库:

      if (Page.IsPostBack)
      {
          grid.DataBind();
      }
      

      应该这样做。

      【讨论】:

      • 我收回了它,它确实有效。当我昨天最初尝试时,我一定做错了什么。谢谢!
      • 这解决了我的几个问题。非常感谢
      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 2012-07-11
      • 2011-12-20
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多