3

GridView関連付けられている がありSqlDataSourceます。

をクリックするButtonと、 が変更され、SelectCommandを使用DataBindして が更新されGridViewます。

PostBack 後、最新のデータを残しておきたいのですがGridView、元の によって読み込まれるのは望ましくありませんSelectCommand

これが と呼ばれるものによって行われることは知っていますViewStateが、正しい方法で実装することができませんでした。

私は両方EnableViewState="true"EnableViewState="false"グリッド自体を試しましたが、うまくいきませんでした。

コード

<asp:GridView ID="GridView1" ...... DataSourceID="UsersSource" >

<asp:SqlDataSource ID="UsersSource" ... SelectCommand="SELECT * FROM USERS"></asp:SqlDataSource>

起動時に、GridViewは の結果で満たされますSELECT * FROM USERS

をクリックするButtonと、次のことが行われます。

UsersSource.SelectCommand = "SELECT * FROM USERS WHERE user_id = 1";
GridView1.DataBind();

GridView新しいデータが入力されます。

ここで、ヘッダーをクリックしてこのテーブルをソートすると、ポストバックが発生し、その後、このテーブルのデータに最初のクエリの結果が含まれます。

ここで何をする必要がありますか?

より詳しい情報

宣言:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Admin.aspx.cs" Inherits="Admin" %>

Page Load メソッドには何もありません。

4

1 に答える 1

4

これは仕様によるものです。ここでの問題は、ページの読み込み時に SqlDataSource が再作成され、ポストバックで selectcommand が維持されず、DataSource が作成されたときに設定されたものに戻ることです。

SelectCommand そのため、SqlDataSourceが最後に正しく読み込まれたときに何を持っていたかを SqlDataSource に伝える必要があります。

SQL COMMAND を ViewState に保存ViewStateEncryptionModeし、Page ディレクティブを設定して暗号化を有効にしてコンテンツを保護するだけです。【安心を常に基準に】

<%@ Page ViewStateEncyptionMode="Always" %>

ボタン クリック イベントで、新しいコマンドをビュー ステートに保存します。

ViewState["currentCommand"] = "SELECT * FROM USERS WHERE user_id = 1";
UsersSource.SelectCommand = ViewState["currentCommand"];
GridView1.DataBind();

ページ読み込みイベントで、次のように設定します。

if( ViewState["currentCommand"] !=null)
    UsersSource.SelectCommand = ViewState["currentCommand"];

Microsoft によるこの投稿を参照してください: http://connect.microsoft.com/VisualStudio/feedback/details/105069/sqldatasource-selectcommand-not-persisting-on-postback

于 2013-08-10T18:36:44.063 に答える