4

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 がポストバックで更新されないのはなぜですか?

4

2 に答える 2

4

ポストバックで明示的なデータバインドが必要になる場合があります。

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

やるべきです。

于 2010-06-04T14:45:38.943 に答える
3

C#

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

貪欲なネットワーク。

于 2011-07-26T15:32:36.127 に答える