おしごとでDataGridViewで一覧表示・編集するアプリを作っていて、タイトルの通りハマった話。
セルに入力があった場合に別の列の値を参照してDBに書込みに行くような処理を書いていた。
DataGridViewは:
- 列により入力可否を設定 (デザイナー画面で「列の編集」を開き、動作>ReadOnlyで設定)
- DataGridViewにKeyDownイベントを設定
- KeyDownイベントでは入力セルのある行で特定の列の値を取得してアレコレ
こんな感じでやっていたのだけど、どういうわけか入力時に処理が走らない。
そのうえ入力不可の列でキーを叩くとイベントが走っている。(これは想定内で、イベントハンドラで対応しているのでOK)
ReadOnly:falseの列ではKeyDownイベントが発生しない
ググってみると、どうやらセル入力時にはセルそのものではなくセルの中にTextBoxが配置され、そのTextBoxを編集しているらしい。
【参考】
DataGridViewでセルが編集中の時にキーイベントを捕捉する
でも同じやり方で過去に作った同じ.NET 4.6.1のアプリだと動いているんだよなあ…何が違うんだろう。
ちょっとモヤモヤするけど、とりあえず解決したので備忘録がてら。