- - PR -
数値型をソースとするTextBoxに一旦入れた後空白にしたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-08 21:32
みなさんありがとうございます。
Validatingのソースは心当たりがあるので明日良く見てみます。 ソースはAllowDBNull=Trueの列です。 あとWindowsFormでVisual Studio 2005です。 [ メッセージ編集済み 編集者: island_town 編集日時 2008-01-08 21:34 ] | ||||||||
|
投稿日時: 2008-01-08 21:35
Nullをセットしたいのだから、Not Nullは違うだろ、と反論がきそう。
先回りしておくと、その入力値のバインド先は主キーで、未入力なら追加(そして児童採番) 入力されたら更新、したいんじゃないかなと。 スレ主の追記求む。 追記: あ、Null可なのね。 先の投稿はぜんぜん関係ないわ。 [ メッセージ編集済み 編集者: かずくん 編集日時 2008-01-08 21:38 ] | ||||||||
|
投稿日時: 2008-01-08 21:36
主キー列ではなく普通の列です。
| ||||||||
|
投稿日時: 2008-01-09 09:57
テスト用のテーブルTable1
ID tinyint PrimaryKey Num int を作りデータセットを作り 詳細形式でフォームにバインドしてみました。 ソースは以下の通りです。
やっぱりNumフィールドで同じ問題が発生しました。 なおAutoValidateプロパティをEnableAllowFocusChangeにすると 確かにフォーカスは移動しますが 今度はValidatingでe.Cancel = true;にしても 数値でない文字列を入れても フォーカスが移動してしまいます。 どうなっているのでしょうか。 よろしくお願いします。 [ メッセージ編集済み 編集者: island_town 編集日時 2008-01-09 10:12 ] [ メッセージ編集済み 編集者: island_town 編集日時 2008-01-09 14:22 ] | ||||||||
|
投稿日時: 2008-01-09 10:44
空回りしっぱなしなので、適当に聞き流してください。
おそらくデータセットデザイナまたはデーソースの追加を介して型付データセットを作っていると思います。 データセットデザイナで確認してもらえば分かりますが、おそらくNumの型はSystem.Int32となってるはずです。 System.String以外は、NullValueプロパティに(Throw exception)しか指定できないみたいです。 内部的に例外が発生して、フォーカスアウトを阻害しているのかもしれません。
Windows フォームにおけるユーザー入力の検証 (Windows フォーム)(microsoft.com)より仕様です。 しかしユーザビリティを考慮した場合、AutoValidateプロパティをEnableAllowFocusChangeにしたほうがよいように思えます。 ただし、その場合、Validationgで入力エラーが見つかった場合は、ErrorProviderでエラー内容を表示するようにし、 またDB更新は、ValidateChildren()を通過した場合のみ行うようにする必要があります。 この辺の話は、過去ログ見てもらった方がよいかと。 私も洗脳されたくちなので。 追記: AutoValidateプロパティがEnableAllowFocusChange出ない場合、ユーザビリティとして何が悪い可といえば、フォーカス移動したいのに出来ないのでストレスがたまるということ(個人的に) アラートが出て、フォーカス抜けれないUIも大っ嫌い(個人的に)。 追記2: Windows フォームにおけるユーザー入力の検証 (Windows フォーム)(microsoft.com)にも書かれていますが、
Windows フォームにおけるユーザー入力の検証 (Windows フォーム)より引用 ということに注意する必要があります。 これは、Bindingのデータソース更新モード(DataSourceUpdateMode)がOnValidationの場合、Null値が反映せず、前回の値のままということを意味しています。 [ メッセージ編集済み 編集者: かずくん 編集日時 2008-01-09 10:48 ] [ メッセージ編集済み 編集者: かずくん 編集日時 2008-01-09 10:57 ] | ||||||||
|
投稿日時: 2008-01-09 13:15
AutoValidateプロパティをEnableAllowFocusChangeにして
テーブルにAge tinyint列を追加し Age列にValidatingイベントを追加してe.Cancel = true;のサンプルを作り 保存時にValidateChildren()を呼び出してみました。
やってみましたが数値を空白に直すとValidateChildern()でエラーを返します。 方法がないようです。 どうしたら良いのでしょうか。 あとどなたかコードの貼り付け方を教えてください。 [ メッセージ編集済み 編集者: island_town 編集日時 2008-01-09 13:41 ] | ||||||||
|
投稿日時: 2008-01-09 13:37
http://www.atmarkit.co.jp/bbs/phpBB/faq-japanese.php#bbcode | ||||||||
|
投稿日時: 2008-01-09 13:43
ありがとうございます。
|