トップ回答者
Formを閉じる際に「保存されていないが良いか?」の確認メッセージを出したい

質問
-
DataSet と TextBox を BindingSource で連結した登録Formがあるのですが、
Formを閉じる際、「保存されていないが良いか?」の確認メッセージを出したいと
考えているのですが、なかなかうまくいかなくて。
DataSet.GetChangesメソッドで、と考えたのですが、GetChangesメソッドを
コールする前に、BindingSource.EndEditメソッドをコールする必要があるかと思うのですが、
入力必須項目が未入力だったりすると、EndEditメソッドで
「NoNullAllowedException: 列 'XXXXX' に Null を使用することはできません。」
の例外が発生してしまうし。
そこで、DataSet.EnforceConstraintsプロパティを一時的にfalseにして試みたのですが、
EndEditメソッドは正常にコールでき、DataSet.GetChangesメソッドでも
変更された行(テーブルの行)も取得できたのですが、今度は、
DataSet.EnforceConstraintsプロパティ値をtrueに戻す事ができなくなってしまって。
(ConstraintExceptionが発生)
何か良い方法はないものでしょうか?
皆様、ご教授願えませんでしょうか。
宜しくお願い致します。
環境:
Windows Vista Ultimate
Visual Studio 2005 Professional Edition SP1
.NET Framework 2.0
回答
すべての返信
-
はなはなはなさん、回答ありがとうございます。
>とあるレコードを編集中にフォームを閉じた場合、その変更は反映させたいですか?(変更として検知するかどうか)
>また、新規レコードを挿入中にフォームを閉じた場合、その変更は反映させたいですか?
「反映」とは、「DataSetに保存する」という事でしょうか?
DataSetへの反映は特にどちらでも良いです。
>どちらも反映させないならば、EndEditは要りません。
DataSet.GetChangesメソッドで、レコードへの変更の有無をチェックしようと考えていたのですが、
EndEditをしないと、DataSet.GetChangesメソッドで何も取得できないのです。
>編集して他のレコードに移れば確定され、反映されます。
「他のレコードに」とはどういう意味でしょうか?
グリッドの様な複数レコードがFormに表示されている訳ではなく、1レコードの各フィールドの値を
Formにテキストボックスで表示しています。
ですので、「他のレコードに移れば」の動作はできません。
-
ぶるーの さんからの引用 「反映」とは、「DataSetに保存する」という事でしょうか?
DataSetへの反映は特にどちらでも良いです。
そうです。DataSetに保存するかどうかです。
ぶるーの さんからの引用 >どちらも反映させないならば、EndEditは要りません。
DataSet.GetChangesメソッドで、レコードへの変更の有無をチェックしようと考えていたのですが、
EndEditをしないと、DataSet.GetChangesメソッドで何も取得できないのです。
では、反映させたいのですね。
Try内でEndEditすればよいかと思います。
新規行で途中までしか入力してなくて、という場合は、Catchで捕らえてEndEditしないことになります。
ぶるーの さんからの引用 >編集して他のレコードに移れば確定され、反映されます。
「他のレコードに」とはどういう意味でしょうか?
グリッドの様な複数レコードがFormに表示されている訳ではなく、1レコードの各フィールドの値を
Formにテキストボックスで表示しています。
ですので、「他のレコードに移れば」の動作はできません。
では、ここの部分は無視してください。
私が検証するのにBindingNavigatorを使ったからです。