- PR -

DropDownListのSelectedItem.ValueのDBインサート

投稿者投稿内容
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2005-02-21 17:28
>Insertメソッドをコメントアウトし、Label3.Text =drpl_process1.SelectedItem.Value
>と追記してみたところ表示されません。つまり空文字ということなんでしょうか?

出力する値を[]でくくるとわかりやすいですよ
これだとスペースと空の判断もつきます。
[ ]スペース
[]空文字

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-21 20:22
そういえばエラーが発生している行が特定されていませんね。されていないと言うか、こちらに伝わっていませんね。行ではなく、コマンド(1つの式)まで分解して、特定してください。
_________________
araariaru
会議室デビュー日: 2005/01/20
投稿数: 14
投稿日時: 2005-02-22 15:20
とりあえず、原因が分かりました。

エラーが発生するDropDownListのdrpl_process1ですが、EnableViewState="False"で生成していました。
ParseをせずにInsertDataに引き渡していた他のDropDownListはEnableViewState="True"で生成してました。
このように一部のDropDownListのみViewState無効にした理由としては、実行時に「ViewStateが破損している可能性があります」というエラーが発生したため、DropDownListを多量に実装した為と思い、一部のDropDownListのみをViewState無効にしました。

ですが、今回上記に気が付きViewStateを有効に戻したところ、何のエラーも出ませんでした。
この辺の理由も、理解しきれていません。

ViewStateの勉強不足だと思うのですが、仮にViewStateを使用せずに、今回のような処理を実現するためにはどうすれば良いのでしょうか?
DropDownListのSelectedIndexChangedイベントでSelectedItem.Valueを変数に保管し、登録ボタンのClickイベントではこの変数を利用してInsertDataをコールすればよいのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-22 21:11
 つまり、「ViewStateが破損している可能性があります」のエラーがでたときに、その原因を追求せず、安易に『DropDownListを多量に実装した為』と思いこんだところが、発端ですね。
 プログラム全体の流れを見直す必要がありそうやなぁ。。。
 それはともかく、EnableViewStateをFalseにして、クライアントに送ったデータを復元していなければ、SelectedItemって、nullとちゃうんかなぁ???それとも、これ自体は取れるけど、内容がnull?Int.Parse(null)で例外送出されてる??

 とにかく、サーバコードが実行されるときは、Windowsアプリケーションの感覚で毎回新たに起動している、つもりでいてください。Webアプリケーションは、そういうものです。
 そして、Page.Loadイベントが終了してしまうまでに、イベント生成に必要なデータを再現しておく必要があります。おそらく、Page.Loadイベントハンドラに、再現のためのすべてのコードを集中していると思います。それをバラさなければなりません。おおよそ、次のような目安でバラしてください。
1.コントロールの生成
 →Page.Initイベントハンドラ
2.クライアントに送ったデータの再現
 →LoadViewStateメソッドをオーバーライド
3.イベントハンドラで使用するかもしれないデータの準備
 →Page.Loadイベントハンドラ

 対症療法では他のところにミスを作り込む可能性が大ですので、なぜエラーなのか、原因を追及するべきです。

_________________

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