ごまなつ Blog

楽しく働ける世界を目指して

【C#】ReadOnlyのDataGridViewでも、ComboboxColumnやButtonColumnは押せる(例外が出る)

内容を表示するだけで、操作させたくないDataGridViewを表示するとします。今回は、DataGridViewComboboxColumnを追加していました。

参照だけにしたいならReadOnly

参照だけにしたいならReadOnly=trueとすれば読み取り専用になります。が、DataGridViewComboboxColumnは押せてしまいます。DataGridViewの上にComboboxが載っているからでしょうか?DataGridViewはReadOnlyになっていても、その上にあるものはReadOnlyにならないのだと考えます。

Enabled=falseにしてみよう

次にEnabled=falseにすることで何とかしようと考えました。ですが、これではデータ列が多い場合に、スクロールバーを出していましたがスクロールバーが機能しなくなり画面外のデータが見れなくなります。

解決策

ReadOnly=trueにしたうえで、CellEnterのイベントハンドラでComboboxColumnが押された瞬間にreturnする。

これでうまくいきました。