- PR -

ASP.NET2.0 Gridview 丸ごと Session退避は可能?

投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-03-05 10:51
いつもお世話になります

GridView の内容を Sessionに退避する方法は?

 以下のような GridView があります
 項目Aから項目Dは あるDBから取得されるものですが
 入力項目に関しては、項目の属性により 入力のパターンがあります
------------------------------------------------------------------
項目A 入力1 | 項目B  入力1     入力2
(Label) (TextBox) | (Label) (DropDownList) (TextBox)  
------------------------------------------------------------------
項目C  入力1     入力2 | 項目D 入力1
(Label) (DropDownList) (TextBox) | (Label) (TextBox)
------------------------------------------------------------------

現在の所、入力項目は非連結項目とし
1つのセルに対して 入力パターン別に パネルを作成し
項目Aの属性に応じて Panel1、Panel2 のどちらかを Visible=False に
しています
-----------------------------------------------
項目A  Panel1  入力1
(Label)     (TextBox)
     Panel2  入力1     入力2
        (DropDownList) (TextBox)
-----------------------------------------------

この非連結の入力項目に入力された値を含めて
このGridViewを丸毎、Sessionに保存したいのですが

 「Session["RMSWebMZ1230__GridView1"] = this.GridView1」 こんな事をやっても
 「シリアライズ化出来ない」というエラーになります
    Session は SQL Server に 置くようにしてあります
    
 このページから別のページに遷移後、戻ってきた時に
 現状の画面をそのまま表示したいのです
 ページ毎、どこかに 退避なんて出来れば 一番在り難いのですが・・・・・
    
 項目の一覧も動的に作成されるし
 入力項目もパターンがたくさんあるので
 うまい事、どこかに 退避できないかなと、思ってしまうのですが・・・
 どうか ご教授願います
     よろしくお願いいたします
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2008-03-05 13:45
引用:

七さんの書き込み (2008-03-05 10:51) より:
    Session は SQL Server に 置くようにしてあります


InProc 以外のセッション状態モードを使用する場合、セッション変数値が外部のデータ ストアに格納されるため、セッション変数の型はプリミティブ .NET 型であるか、シリアル化できる必要があります。
という事らしいです。
どうしてもGridViewをそのまま保存したいならセッション状態モードをInProcに変更するしかないようです。
影響大きそうですが…^^;
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-03-05 14:11
引用:

Yamさんの書き込み (2008-03-05 13:45) より:
[どうしてもGridViewをそのまま保存したいならセッション状態モードをInProcに変更するしかないようです。
影響大きそうですが…^^;


Sessionに大量データ(このGridView)を確保したいがために
Session を SQLServer に置いたのに
返ってあだになったって事???? (涙)

Xml に吐き出してみるとか
むりくり 入力項目を DataTable にバインドして
DataTable で渡すとか するしか ないですかねぇぇ
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-05 14:14
2点問題があるような気がします。

1)SQLServerにセッションを保持するのはどうでしょうか?
(そもそも、前のページを表示する為に、SQLServerのモードはどうでしょうか)

2)非連結を連結したらどうでしょうか?
(そもそもモデルを保存するのがセッションですから、Viewは保存しないです)
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-03-05 14:27
引用:

indigo-xさんの書き込み (2008-03-05 14:14) より:
2点問題があるような気がします。

1)SQLServerにセッションを保持するのはどうでしょうか?
(そもそも、前のページを表示する為に、SQLServerのモードはどうでしょうか)

2)非連結を連結したらどうでしょうか?
(そもそもモデルを保存するのがセッションですから、Viewは保存しないです)



前のページを表示するため というのではなく
このGridViewの欄が 検索条件入力のテーブルなんです
検索対象項目、自体があるテーブルの内容に依存して
動的に横3列のGridViewとして作成されています、
各項目に対して、属性に応じた検索条件の入力パターンが
あるのです
このテーブルから、データ一覧するSQL文が 発行されます
一覧画面からの遷移先の処理も複雑だったので
マルチビューを使わなかったのですが
マルチビューを使えばよかった・・・・・・
後悔、先に たたずって やつですねぇ

ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-03-05 14:59
引用:

七さんの書き込み (2008-03-05 14:27) より:

前のページを表示するため というのではなく
このGridViewの欄が 検索条件入力のテーブルなんです


自分だったら GridView そのものを退避するんじゃなくて
その DataSource にしている(と思われる)DataTable あたり
を退避して使うようにしますけど、それじゃダメなんでしょうか。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-03-05 15:30
引用:

ぽぴ王子さんの書き込み (2008-03-05 14:59) より:
自分だったら GridView そのものを退避するんじゃなくて
その DataSource にしている(と思われる)DataTable あたり
を退避して使うようにしますけど、それじゃダメなんでしょうか。




ごもっともです
GridViewを作成する時に
属性毎の入力項目全部のセルを持つのは大変だと思って
非連結にしてしまったのです
現在のDatTable は 検索対象項目の情報しか持っていないのです
入力項目を格納する場所がないのです・・・・
全部の入力項目パターン分のセルを作成して バインドしなおすか

画面上(入力項目が投入された状態)の GridView から
DataTable を作成するか・・・・
と思ったのですが
GridViewから DataTableを作成する うまい方法って
ないでしょうか?

うーー 頭が混乱してきました・・・


[ メッセージ編集済み 編集者: 七 編集日時 2008-03-05 16:21 ]
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-03-05 15:54
引用:

七さんの書き込み (2008-03-05 15:30) より:

GridViewを作成する時に
属性毎の入力項目全部のセルを持つのは大変だと思って
非連結にしてしまったのです


(ノ∀`) アチャー(失礼)

引用:

現在のDatTable は 検索対象項目の情報しか持っていないのです
入力項目を格納する場所がないのです・・・・
全部の入力項目パターン分のセルを作成して バインドしなおすか


よくわからないですが、自分ならこちらを選択すると思います。
入力項目の分の列を DataTable に追加したらなんとかなりそうですけど。

引用:

GridViewから DataTableを作成する うまい方法って
ないでしょうか?


GridView の列をループでまわして DataRow に入れたものを DataTable に追加。
それを GridView の行分だけループでまわす。
手っ取り早くて素直な方法だと思います。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。

スキルアップ/キャリアアップ(JOB@IT)