- PR -

データバインド時のデータ変換について(文字列→CheckBox変換)

1
投稿者投稿内容
noda-pi
会議室デビュー日: 2008/07/12
投稿数: 4
投稿日時: 2008-10-02 00:18
.NET FrameWork 3.5上でFormアプリケーション開発を行っています。

Form上に配置したCheckBoxコントロールに対し、2値の値を持つ文字列を
バインドする方法を探しています。

現在、フォーム上にDataSetを配置し、BindingSource経由でフォーム上の
テキストボックスなどにデータを渡しています。
この中で、"YES/NO"等の文字列が設定されているテーブル列があり、
その値に応じて、CheckBoxコントロールのCheckState(もしくはChecked)
プロパティの値を変更したいと考えているのですが、何かいい方法はないでしょうか?

解決策がみつからず、現在はTextBoxコントロールに一旦値をバインドし、
TextBoxコントロールのTextChangedイベントでCheckBoxの値を操作し、
CheckBoxのClickedイベントで、TextBoxにCheckBoxの内容を渡しています。
しかし、このような方法ではCheckBoxの数が増えると破綻します。

何卒、いい方法を教えてください。



かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-10-02 01:30
デザイナレベルで済ませたいのなら、DataAdapterに指定するSQLにおいて、
コード:
(case when MY_FIELD = 'YES' then 1 else 0 end) as MY_FIELD_FLG


の様に、文字列->数値変換を行えばよいでしょう
使用しているDBMSが何か分からないけど、最近のものならほぼcase句は使えるでしょう。
DB更新の際も、同様にcase句で場合分けを行えばよいでしょう。

ソースコードで対処するのであれば、バインド先のコントロールからBindオブジェクトを取得し、Formatイベントで文字列->数値変換を、Parseイベントで数値→文字列変換を行うようイベントハンドラを定義し、追加してあげればよいでしょう。

後者の詳細はBinding.Parse イベントのサンプルコードを眺めてみてください。
noda-pi
会議室デビュー日: 2008/07/12
投稿数: 4
投稿日時: 2008-10-03 03:03
回答ありがとうございました。

今回はSQLは利用していなかったためBinding.Parse、Formatイベントを
利用して解決しました。
デザイナから直接利用できないというのは不便ですが、それでも、
当初やっていた方法と比べれば雲泥の差でした。

ありがとうございました。
1

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