- - PR -
DataSetのデータが消える?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-09-05 17:39
C#で開発を始めて間もない者ですがよろしくお願いします。
今DataSetを用いてDataGridにデータを表示することを 行っているのですが、その際DataBind後にDetaSet内のデータが参照出来ないと いう状況が起こっているのですが、これが普通なのでしょうか? もしくはどこかの設定によって起きているのでしょうか? 以下がそのときの状況のソースコードなのですが [1]では値aが取得できるのですが、[2]ですとaの値が取れずに エラーで「位置0に行がありません」というメッセージが出てしまいます。 どなたかお分かりの方、よろしくお願いします。 =============================================== private void Page_Load(object sender, System.EventArgs e) { if (! this.IsPostBack) { DataAdapter1.Fill(DataSet1); DataGrid1.DataBind(); string a; a = Convert.ToString(DataSet1.Tables[0].Rows[0][0]); ・・・[1] } private void Button1_Click(object sender, System.EventArgs e) { string a; a = Convert.ToString(DataSet1.Tables[0].Rows[0][0]); ・・・[2] } ---------------------------------------------------------------- | ||||||||
|
投稿日時: 2002-09-05 18:02
そういう問題があることがわかっていたのでASP.NETはやめてWindowsコントロールで実現しました(^^; Page_LoadとButton1_Clickの実行される順番は確かめましたか?ここのどこかに書いてあったような・・・? あと、ソースコードは大括弧でくくったcodeと/codeの間に埋めるといいみたいです。 | ||||||||
|
投稿日時: 2002-09-06 09:09
Jittaさん返信ありがとうございます。
ご指摘通り再度掲示板内の情報を見直してみたのですが 自分では見つかりませんでした。 (DataGridのカラム情報が消えるという内容が、微妙に関係あるような無いような ですけれども) あと、イベントの順番いついては Page_Load → Button1_Clickなのをデバッグにて確かめたので DataSet内に値がFillしてないということは無いようです。 それと、DataBind処理がデータを消してしまっている原因かと疑い、 この前のソースコードからDataBindしている行を消したのですが 同じく、Button_Clickイベント内でDataSetから値を取得することは出来ませんでした。 DataSetの内容が消えてしまうと、DataGridなどで編集した情報が 保持されないので、DataSetはデータを読み込んでDataGridに一覧表示すること ぐらいしか出来ない気がするのですが、みなさんどのようにDataSetの情報を保持して データの編集処理とかを行っているのでしょうか? よろしくお願い致します。 | ||||||||
|
投稿日時: 2002-09-06 14:53
かげんです。
デバッグで確認されたので間違いないのかも知れませんが 再度以下をチェックされてはどうでしょうか? 起動時からボタンをクリックした時に画面表示 Page_Load <-- ! this.IsPostBack | <-- ボタンクリック時 Page_Load | Button1_Click 上記で2回目のPage_Load は this.IsPostBackは実行 されていないと思いますが、どうでしょうか? IsPostBack の外に DataBindをおかれて一度確認して みて下さい。 | ||||||||
|
投稿日時: 2002-09-06 17:37
上記の通りに試してみました。 記述どおりに Page_Load !this.IsPostBack内 ↓ Page_Load !this.IsPostBack外 ↓ボタン押す Page_Load !this.IsPostBack外 ↓ Button1_Click でした。 それで、その時に細かくDetaSet内の値をチェックしたのですが 結果、PostBackを行うとDataSet内の値がなくなるという結果なのですが そういう仕様なのでしょうか? ↓結果とソースコード ↓起動 [1] 値あり [2] 値あり [3] 値あり ボタン押す [1] 通らない [2] 値なし エラー「位置0に行がありません」 [3] 値あり ([2]をコメントアウトしてエラー回避した場合) [4] 値あり (同上)
| ||||||||
|
投稿日時: 2002-09-08 10:46
かげんです。
.NETの仕様ではなく、Webアプリケーションの仕様だと 思います。 別の方法として、Sessionに保存してWebフォームで値を 引き継ぐ方法で試した事もありますがメモリー・パフォ ーマンスなど考慮する必要がありますが・・ 以前以下のように試した事があります。 If Not IsPostBaxk Then 初期処理 Else 変数A = CType(Session("変数B"), System.Data.DataTable) End If ページ終了時 Sessuib("変数B") = 変通A | ||||||||
|
投稿日時: 2002-09-09 09:03
かげんさん、ありがとうございます。
やはり、Webの仕様ですか・・・ Webアプリ作成初めてですので、勉強になりました。 今は、やむをえずPostBackする前にデータ処理を行うようにしているのですが Sessionないし他の方法で値の退避するのを試してみます。 ありがとうございました。 |
1