- PR -

DataGridでの編集(WindowsForm編)

1
投稿者投稿内容
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2002-10-31 14:52
いつも、お世話になっております。

DataGridについてですが、過去にもいろいろなスレッドで
話題になっているようですが、WEBでのDataGridの話題が
多いようです。

WindowsFormでDataGridを使う場合ですが、
データを連結して表示するところまではほとんどの書籍に
載っているのですが、さて細かい編集部分になるととたんに
参考資料がないような気がします。
以下の点で作法と言うかセオリーがわかりません。
なにやら機能豊富なコントロールの様ですが、
みなさま使いやすく感じておられますでしょうか?

・入力データの検査
  SetColumnErrorを使用する方法が解説されていますが、
  MaxLengthを超えた時に自動で出力されるメッセージボックス
  でのUIの実現方法はないのでしょうか?
  既存のレコードにはCancelEdit()が使えるのですが、
  追加されたレコードではエラーになってしまうようです。
  また、SetColumnErrorでのエラーマークを消す方法も不明です。
  
・Deleteキーでレコード削除時の確認
  Deleteキーでレコード削除時に確認ダイアログを表示して
  「No」の場合に削除をキャンセルする事はできるのですが、
  これがDataGridに反映されません。
  DeletedイベントをフックしてRejectChanges()で削除を取り消す
  まではいいのですが、この変更をDataGridに知らせる方法が
  見当たらないのです。

このあたりの資料等ありませんでしょうか?
ヘルプを探しまくったのですが、どれも核心に
辿り着けませんでした。
よろしくお願いいたします。
Hirashige
常連さん
会議室デビュー日: 2002/10/26
投稿数: 29
投稿日時: 2002-11-02 09:42
 確かにDataGridに関する情報は多くないような気がしますね....
 DataGridは私も今作成中のアプリで使用していますが、だんだん判ってくると結
構便利なコントールだと思っています。

入力データの検査について
 SetColumnError や EditCancel などのメソッドを使っておられるので、既にご存
じかもしれませんが、DataGrid への入力値を検査するには DataTable の
ColumnChanging または ColumnChanged イベントが使えます。
 使い方はヘルプの以下のアドレスにあります。
 (注)MSDN 4月号のアドレスですのでご自分の環境で読み替えてください。

 ms-help://MS.VSCC/MS.MSDNQTR.2002APR.1041/vbcon/html/vbtskHandlingErrorsWithWindowsFormsDataGridControl.htm

 ColumnChanging または ColumnChanged 内ではStartEditやEndEdit(恐らく
CancelEditも)使えませんので検査によってフィールド値を変更する場合は
RowChanging または RowChenged イベントも併用する必要があるかも知れません。

Deleteキーでレコード削除時の確認について
 私の環境では ReadOnly にしていない限り、選択された行(又は複数行)はDelete
キーを押下した時点で一旦画面から削除されます。
 私の場合、確認は DataGrid の KeyUp イベントをフックして Deleteキーなら「削
除を完了」するかどうか確認メッセージをだして、確定なら DataTableの
AcceptChanges() で、NO なら RejectChanges() で戻します。
 ここで RejectChanges() を行うと画面上一旦削除されていた対象行が再表示されます。
 RowDeletedイベントは複数行削除しても1行毎に発生するので削除が発生した判断材
料としています、もっと良いやり方があるかも知れませんが・・・・
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2002-11-05 10:49
Hirashigeさん、こんにちは。
書き込みありがとうございます。

KeyUpイベントですかぁ!
気が付きませんでした。
最初に自分は「Row_Deleting」イベントを使っていました。
説明には、「行が削除される前に発生する」との事でしたので、
ここでRejectChanges()メソッドを起動していました。
これが、うまくいかないんですよねぇ〜

ところが、ご指摘の通り「KeyUp」を使用したらうまくいくじゃ
ないですか!(^^)
ありがとうございました。

でも、またDataGridで問題が・・・
スレッドを変えて書き込ませていただきます。
1

スキルアップ/キャリアアップ(JOB@IT)