トップ回答者
C#2010Express DataGridView RowをDeleteキーで削除するのになぜSelectionModeを・・・

質問
-
C#2010Express DataGridView Row 行 削除 Delete Deleteキー SelectionMode
Datatableで1次元配列を用意し、それをDatasetに含めた上で、DataGridViewにデータソースさせて作業しています。
DGVに表示されている縦1列に並んだ表のうち1つをSelectした状態で、Deleteキーを押してみます。
勿論、AllowUserToDeleteRowsはTrueです。なのに、全然反応してくれません。Deleteキー押下にイベントを発生させてやれば済む話ではありますが、
SelectionModeをRowHeaderSelectからFullRowSelectに 切り替えたら、たちまちDeleteキーでSelectedRowを削除することが
できました。なぜ、Deleteキーで行を削除しようとした場合、SelectionModeをRowHeaderSelectからFullRowSelectに予め切り替えて置かなければならないのですか? RowHeaderSelectにしておく必然性もわたしにはありませんが、ちょっと疑問です。
回答
-
おそらく、セルを選択してDeleteキーを押したのだと思いますが、
この状態ではセルが選択されているだけで、行は選択されていない状態です。
列が1つしかない場合はセルを選択したら行選択とみなす、というような判断は
残念ながらDataGridView側ではやってくれません。
なので、セルを選択した場合に行選択状態にする、という設定を行う必要があります。
これが「FullRowSelect」にあたります。
MSDNによりますと、以下のように書いてありますので参考にしてください。
http://msdn.microsoft.com/ja-jp/library/3c89df86(v=vs.80).aspx
なお、一列ではなく、試しに複数列のデータで試してみると分かりやすいと思います。- 回答としてマーク bianoide 2011年4月11日 10:04
すべての返信
-
おそらく、セルを選択してDeleteキーを押したのだと思いますが、
この状態ではセルが選択されているだけで、行は選択されていない状態です。
列が1つしかない場合はセルを選択したら行選択とみなす、というような判断は
残念ながらDataGridView側ではやってくれません。
なので、セルを選択した場合に行選択状態にする、という設定を行う必要があります。
これが「FullRowSelect」にあたります。
MSDNによりますと、以下のように書いてありますので参考にしてください。
http://msdn.microsoft.com/ja-jp/library/3c89df86(v=vs.80).aspx
なお、一列ではなく、試しに複数列のデータで試してみると分かりやすいと思います。- 回答としてマーク bianoide 2011年4月11日 10:04
-
リンクをあげておきます。
http://japan.internet.com/developer/20070522/26.html
DataGridViewコントロールを操作する101の方法 - japan.internet.com
http://dobon.net/vb/dotnet/datagridview/
http://www.atmarkit.co.jp/fdotnet/vblab/gridlab_index/index.html
http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_index/index.html
http://msdn.microsoft.com/ja-jp/library/y8c0cxey.aspx
http://msdn.microsoft.com/ja-jp/library/e0ywh3cz.aspx
Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/