Параметр ASP.NET для SqlDataSource программно не работает для обратной передачи - PullRequest
4 голосов
/ 04 июня 2010

Я хочу установить параметр для 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, когда нет источника управления?

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Возможно, вам понадобится объяснение данных на постбеках:

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

Должен это сделать.

3 голосов
/ 26 июля 2011

C #

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

Жадные сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...