DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridの削除処理

環境/言語:[VB.NET]
分類:[.NET]

初歩的な事かもしれませんが教えてください。

グリッド上の行を選択してDeleteキーで削除ができるのはいいのですが
メッセージボックスで確認を行う場合には
どういうイベントで監視すればいいのでしょうか?
基本的にはRowDeletingとRowDeletedイベントは通るようなのですが
Deletedのほうは追加行の場合RejectChangesではもどってきませんし・・・
この場合の基本的な考え方をレスして頂ければ幸いです。
#基本的な考え方とかよく知りませんし、そういった経験もないのですが‥‥(汗)

 検索したところ、次のようなやり取りが見つかりました。参考になるでしょうか?

DataGridでの編集(WindowsForm編)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2522&forum=7
上記掲示板の回答では、対応できません。
「追加行」は質問の内容通り「戻ってきません」し、
更に他のデータもDataTableの前回確定段階のデータまで戻されてしまいます。
RowStateを有効活用して開発している方の場合、そこかしこで意味のないAcceptChangesを
実行してることはないでしょうから、呼出後最初の状態まで戻ることになります。


行削除は、RowDeletingで例外を発生させることで無理やり取り消すことはできますが、
DataGridのDeleteキー押下によりDeleteを呼び出された場合は
例外をハンドルしてフレームワークの例外メッセージを沈静化させる記述をする場所が
ないわけで、うるさくて仕方ありません。
なので、選択してDeleteキー、の機能を使えないように行ヘッダを非表示にして、
自前で行削除を用意するのが得策かと。
(DataGridのキーイベント3種全てでDeleteキーを拾ってHandled=Trueにしても、
Deleteが呼び出されますので。)
例えば、
ボタン押したらカレント行を消すかどうか質問表示して、
「はい」ならカレント行のDeleteメソッドを呼び
「いいえ」ならDelete自体呼ばない
ようにする、といった機能。

これでは、まとめて複数行選択して削除、とかできませんが、
それをしたければチェックボックスカラムか1文字のカラムを判定用に追加して、
チェックされている(ないし1が入っている)行を削除する、といった感じです。

おまけ情報:
カレント行の取得方法のヒント
操作を繰り返したDataGridのインデックスと実際のDataTableとのインデックスはずれているので
行の特定にはCurrencyManagerを使うようにします。
これを使うと、(DataGrid等、バインドしているコントロールで)カレントになっているほんとの行を得られます。
レス有難う御座います。
やはりDeleteをつぶすのは得策ではないのですか。
行ヘッダ消しでDeleteが意味なくなるというのは
たしかになるほどと思いました。
でも複数削除は無理ですし。

とりあえず、ボタンを配置して選択行を消すような
仕組みでやってみます。

P.S.
わかりずらい質問で申し訳ありませんでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板