FC2ブログ

三角端。

Δ-sphere管理人三角区也による絵日記/ゲーム開発日記。コメントは右側のweb拍手からどぞー。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

データベース作成ツール データ整形

前回の続き。

マサカツヅクトハオモッテイナカッタヨ

データベースの値の整形のお話。

screen_254.jpg

こんな数値データの表を作ったとします。
データ型は整数です。
そのときにユーザーが小数を入力したらどうなるでしょう。
データとしては整数を持たなければいけないのに小数がデータになってしまいます。
あるいは数値以外の文字列を入力したときデータは文字列になってしまいます。

そのために小数→整数に変換したり、不正データである文字列であればキャンセルしたりという動作が必要になります。

ユーザーが入力を決定したときにCellParsingイベントが発生します。
このCellParsingイベントでユーザー入力データを正しいデータに整形することができます。
この引数(DataGridViewCellParsingEventArgs e)のe.Valueを書き換えたらできるんじゃねという安易な考えのもと、

if(e.Value.GetType() != typeof(int)){
 e.Value = 0;
}

というコードを書きました。
結論から言うとこれだけではまったく反映されません。
文字列データを入力したとき、0が代入される・・・デバッガで1行ごと実行しても代入されるんですが表示上は入力した文字列がそのまま表示されます。
どうやらe.ParsingAppliedをtrueにしないとこの関数内の変更は反映されないようで・・・

んでe.ParsingAppliedをtrueにしてみたら今度は止まる止まる。
スタックトレースも内部的に処理されているような場所でとまっているしなんだこれ・・・
色々調べていたらこのe.Valueには必要な型というのがあるらしくその型にしないといけないっぽいのです。
e.DesiredTypeを見てみたらdecimalだったので、
e.Value = 0 を
e.Value = 0m
にしたらうまく動くようになりました。

int→decimal変換くらい勝手にしてくれてもいいと思うんだ・・・ うん
スポンサーサイト

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。