- - PR -
DataGridViewのLostFocus時にデータが更新できない事がある
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-12 11:35
御世話になります。
XP + VS2005(VB2005)による開発です。 DataGridViewにDBデータ(2列×n件)を表示、フォーカス喪失時にその内容をDBに反映さ せたいのですが、成功する時と失敗する時があります。 (失敗と言ってもエラーにはならず、OleDbDataAdapter.Updateの返す更新件数が0で、 データも更新されていない状態ですが) ---------------------------------------------------------------------- 成功時: 例えば1行・1列目のセルを編集し、2行・1列目など別の行のセルに移動し、 その後フォーカスを喪失(別のコントロールへ移動、フォームクローズ) した場合 失敗時: 例えば1行・1列目のセルを編集し、その後フォーカスを喪失した場合 ※別の行へ移動しない ---------------------------------------------------------------------- CellValueChanged でも試みたのですが、結果は同じでした。 失敗時の例のパターンでもデータを更新させる方法は無いでしょうか? どなたか御教授下さい。 宜しく御願い致します。 | ||||
|
投稿日時: 2007-01-12 19:24
こんばんは。
単純にLostFocusイベントの中で編集確定してあげれば良いと思うのですが・・・。 デバッグで、何故更新されないかは確認されましたか? | ||||
|
投稿日時: 2007-01-12 22:47
LostFocusは低水準イベントなので、.NETでは代わりにLeaveを使う方が良いようです。
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.lostfocus(VS.80).aspx 他の行にセルを移動すると正しく更新されることから考えますと、 行の編集が確定されてないのではないかと思います。 CurrencyManager.EndCurrentEdit あたりでどうでしょうか? | ||||
|
投稿日時: 2007-01-12 23:32
御世話になります。
梶さん、KIさん、ありがとうございます。 梶さん: 『編集確定』とはどうすれば、編集確定になるのでしょうか? 書いていませんでしたが、Update前に該当セルに対してEndEditメソッドを行っても 結果は同じでした。 因みに何故更新されないか?ですが、デバッグ出力したところ、該当行のRosStateが Unchangedに設定されています。 これ以上は、何を調べてよいのか解らず… KIさん: とりあえず、DataGridViewのLeaveイベントに以下のコードを書きました ---------------------------------------------------------------------- Dim cm As CurrencyManager = _ CType(Me.BindingContext(DataGridView1.DataSource, _ DataGridView1.DataMember), CurrencyManager) cm.EndCurrentEdit() updateTable() ' Adapter.Update を行うサブルーチン ---------------------------------------------------------------------- が、結果は同じでした。 もしかして、的外れなことをしていますでしょうか? | ||||
|
投稿日時: 2007-01-13 01:39
DataGridView.EndEdit → DataRowView.EndEdit の順に呼んでみてください。
DataGridView.EndEditはセルの編集を確定し、 編集内容をDataRowViewに格納しますが、先にDataRowView.BeginEditが 暗黙的に呼び出されているので、新しい値はProposedバージョンに格納され、 この時点ではDataRowのRowStateはUnchangedのままです。 行の編集内容を確定するにはDataRowView.EndEditを呼び出す必要があります。 CurrencyManager.EndCurrentEditでも解決できるようですが、 MSDNによると「お勧めしない」そうです。失礼しました。
| ||||
|
投稿日時: 2007-01-13 03:17
御世話になります。
KIさん、ありがとうございます。 御陰様で御提示頂いたコードにより実現できました。 DataGridViewはもちろん、VS2005自体が初めてなもので、手が付けれずに困っておりま した。 有難う御座いました。 |
1