none
SqlDataSourceのEnableViewStateについて RRS feed

  • 質問

  • お世話になります。

    SqlDataSourceのEnableViewStateをTrueまたは、Falseに設定した場合、どのような動作の変化があるのでしょうか?

    GridViewの場合は、EnableViewStateの設定で、POSTBACK時、再度、データベースからデータを取得せず、ViewStateで

    保持されているデータを使用するみたいで、イベントの発生に変化がありましたが、SqlDataSourceのEnableViewStateは、特に

    変化がわかりませんでした。

    ご指導よろしくお願いします。

    2011年3月29日 8:29

回答

  • > SqlDataSourceのEnableViewStateをTrueまたは、Falseに設定した場合、ど
    > のような動作の変化があるのでしょうか?

    ポストバック前後で動的に設定が変わるプロパティや、バインドするデータ、
    ユーザーインターフェイスがなければ、EnableViewState を True に設定して
    も、コントロールは ViewState を保持しないそうです。

    SqlDataSource のプロパティをプログラムで動的に変えるようなことをしてい
    なければ、そもそも ViewState を持っていないので、True にしようと False
    にしようと何も変わらないということではないかと思います。

    以下のページに、ViewState に関する詳しい説明と、ViewState を表示/パー
    スするサンプルコードがあります。このコードを使って、True/False を切り
    替えた場合の変化を見てはいかがですか?

    ViewState: All You Wanted to Know
    http://aspalliance.com/135

    2011年4月2日 4:10
  • 基本的にViewSateは画面の状態を保持するものです。別の言い方をすれば画面に表示されるコントロールの状態を保持するものです。もし、この仕組みが無ければ自力でSession変数などを使って保存および復元のコードを書かなくてはなりません。
    一方、SqlDataSourceは画面に表示するコントールではありません。データベースからデータをやり取りするコントロールです。よって、ViewSateは基本的に関係ありません。
    ポストバックでGridViewからデータが失われるのを防ぎたいように受け取れましたが、それでよろしいでしょうか? もし、そうであれば、GridViewに表示しているデータテーブルをSession変数に入れ、ポストバック時にSession変数から復元する方法があります。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月4日 1:30
    モデレータ

すべての返信

  • > SqlDataSourceのEnableViewStateをTrueまたは、Falseに設定した場合、ど
    > のような動作の変化があるのでしょうか?

    ポストバック前後で動的に設定が変わるプロパティや、バインドするデータ、
    ユーザーインターフェイスがなければ、EnableViewState を True に設定して
    も、コントロールは ViewState を保持しないそうです。

    SqlDataSource のプロパティをプログラムで動的に変えるようなことをしてい
    なければ、そもそも ViewState を持っていないので、True にしようと False
    にしようと何も変わらないということではないかと思います。

    以下のページに、ViewState に関する詳しい説明と、ViewState を表示/パー
    スするサンプルコードがあります。このコードを使って、True/False を切り
    替えた場合の変化を見てはいかがですか?

    ViewState: All You Wanted to Know
    http://aspalliance.com/135

    2011年4月2日 4:10
  • ViewState をパースするコードの載っているページを紹介しましたが、ViewState の
    有無を見るだけなら Trace すれば十分でした。

    というより、SavePageStateToPersistenceMedium が引数に受け取る Object には
    ViewState のみでなく ControlState も含まれているので、EnableViewState を
    False にしても ControlState が残ってしまい、ViewState があるのかないのか
    よく分からないです。

    2011年4月3日 9:53
  • SurferOnWww様、返信ありがとうございます。

    >SqlDataSource のプロパティをプログラムで動的に変えるようなことをしてい
    >なければ、そもそも ViewState を持っていないので、True にしようと False
    >にしようと何も変わらないということではないかと思います。

    アドバイス通りにTraceで確認しました。SqlDataSourceは、プログラムで
    FilterExpressionやSelectCommandを動的に変更してもViewStateは、ないままのようです。
    SqlDataSourceは、どのようなことをしてもViewStateは、保持されないのでしょうか?
    よってSqlDataSourceは、EnableViewStateの設定はどちらに設定しても動作は同じ
    ということでよろしいでしょうか?

    2011年4月4日 1:02
  • 基本的にViewSateは画面の状態を保持するものです。別の言い方をすれば画面に表示されるコントロールの状態を保持するものです。もし、この仕組みが無ければ自力でSession変数などを使って保存および復元のコードを書かなくてはなりません。
    一方、SqlDataSourceは画面に表示するコントールではありません。データベースからデータをやり取りするコントロールです。よって、ViewSateは基本的に関係ありません。
    ポストバックでGridViewからデータが失われるのを防ぎたいように受け取れましたが、それでよろしいでしょうか? もし、そうであれば、GridViewに表示しているデータテーブルをSession変数に入れ、ポストバック時にSession変数から復元する方法があります。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月4日 1:30
    モデレータ
  • trapemiya様、返信ありがとうございます。

    >データベースからデータをやり取りするコントロールです。よって、ViewSateは基本的に関係ありません。
    「ユーザーインターフェイスがなければ」、「SqlDataSourceは画面に表示するコントールではありません」の回答で理解できました。ありがとうございます。


    >ポストバックでGridViewからデータが失われるのを防ぎたいように受け取れましたが、それでよろしいでしょうか?
    現在、ASP.NETの学習中でそこまでは、まだ考えていませんでした。
    ただ、GridView等は、設定によってポストバック後の処理に変化があったのに、SqlDataSourceは、
    変化がなかったため知りたく、質問させていただきました。何も変化がないのであれば、
    なぜそのようなプロパティの設定があるのでしょうか?

    2011年4月4日 2:56
  • ただ、GridView等は、設定によってポストバック後の処理に変化があったのに、SqlDataSourceは、
    変化がなかったため知りたく、質問させていただきました。何も変化がないのであれば、
    なぜそのようなプロパティの設定があるのでしょうか?


    SqlDataSourceが単にControlから派生しているからだけではないでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月4日 3:06
    モデレータ
  • trapemiya様、返信ありがとうございます。

    分かりました。
    現在、学習中ですので、またお世話になると思いますがその時は、よろしくお願いします。
    このたびは、ありがとうございました。

    2011年4月4日 3:24