こんにちわ
開発環境は
Visual studio 2008
asp.net VB
です。
問題の前に、今つくっているものの紹介をします。
GridViewのItemTemplateにテキストボックスを入れています。またほかの列にドロップダウンリストを入れています。
テキストボックスの内容が変更されたら値の検証をし、そして内容に応じて別の列の同じ行のドロップダウンリストの内容を変更するために、OnTextChangeイベントハンドラにおいて検証のコードとドロップダウンリストの変更のコードをVBで書いています。autoPostBackはTrueにしています。
Gridviewへは非ポストバック時にデータベースからデータを持ってきてDataTableをバインドしています。
GridViewのRowCreatedイベントでテキストボックスのIDにrowIndexを付加しています。
こういったものを作っているのですが、問題が起きました。
GridViewのテキストボックスの値を変更してフォーカスを外すと、postBackが起きますが、テキストボックスの値が、変更前のものに戻ってしまうのです。そしてonTextChangeイベントが起きません。
この問題は最初はありませんでした。最初は値の変更もできたし、検証コード、ドロップダウンの内容の変更もうまく働いていました。これとは関係のない要素を作っているうちに、いつのまにか値の変更ができなくなっていました。またこの問題が起こった後のことですが、RowCreatedイベントにブレークポイントをつけて、一回一回止めると、ごくたまに、値が変更できて、onTextChangeイベントが走ることがあります。
どうしてGridViewのテクストボックスの値を変更した後のpostBackの後、値が元に戻ってしまうようになったのかについて、わかるかたがいらっしゃいましたら、教えていただきたく思います。
テキストボックスの変更後の値でViewStateが上書きされないという現象が起こっているのかなとも思うのですが、ご意見をいただきたく思います。
postBack後にGridViewへのデータベースからとってきたデータのデータバインドは発生していないことを確認しております。
追記
自己解決?と呼べるかどうかはわかりませんが、textBoxの値を変更してからpostBackが起こると元の値に戻らないようにすることができました。
GridViewのRowCreatedイベントでテキストボックスやドロップダウンリストのIDをrowindexを付加したものに変更していたのですが、これをやめて、aspxに書かれたIDのままにしておくと、値が元に戻る現象がなくなりました。
イベントが発生したテキストボックスがどの行なのかを取得するためにrowindexを付加したIDに変えていたのですが、これをやめて、ClientIDから行番号を取得する方法に変えたらうまくいきました。
しかし、なぜ、テキストボックスやドロップダウンリストのIDを変えると、テキストボックスの値が元に戻る現象が起きたのか理解できていません。よろしければ、ここについて何か意見をいただきたいので、まだ回答を受け付けます。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/13 08:38