|
お世話になります。
shuさん、todoさん ヒントをいただき、ありがとうございました。 アドバイスを元に以下のように組み込みをしてみましたが、まだ正常に動作できておりません。
作成しているアプリはデータ編集用の画面で、画面上半分にデータ編集用のコントロールを配置し、カレントレコードを編集できるようにしています。画面下半分はデータグリッドでデータ一覧を表示しています。
データ編集用のコンボボックスに表示するデータはマスタテーブルから直接表示するようにしています。
○テーブル構成(テーブル名:mst) ID1,ID2,名称 全てテキスト型のフィールド 主キー ID1,ID2 で構成
○コンボボックス設定 DataSource=select ID1 & '_' & ID2 as ID ,名称 from mst DisplayMember=名称 ValueMember=ID
次に、コンボボックスを拡張したカスタムコントロールを作り、SelectedValueについて、2個のフィールドを 扱えるようにしてみました。
クラス:ComboEx public string SelectedValue1 { get { string s = this.SelectedValue.ToString(); string[] ss = s.Split('_'); return ss[0]; } set { this.SelectedValue = SelectedValue1 + "_" + SelectedValue2; } } public string SelectedValue2 { get { string s = this.SelectedValue.ToString(); string[] ss = s.Split('_'); return ss[1]; } set { this.SelectedValue = SelectedValue1 + "_" + SelectedValue2; } }
編集対象のテーブルは以下のような構成です。 ○テーブル構成(テーブル名:dst) ID1,ID2,ID3,名称 全てテキスト型のフィールド 主キー ID1,ID2,ID3 で構成
上記テーブルをデータセットに格納して、m_BindingSourceのDataSourceに指定しています。 そして、コンボボックスコントロールに連結するため、
ctlComboEx.DataBindings.Add("SelectedValue1", m_BindingSource, "ID1"); ctlComboEx.DataBindings.Add("SelectedValue2", m_BindingSource, "ID2");
としました。
上記のような内容で、コンボックスからデータを変更したときには、ID1とID2のフィールドにデータが反映されるようになりました。 しかし、データグリッド上でカレントレコードを移動したとき、コンボボックスの内容が移動先のデータの内容に連動しません。その上、コンボボックスで選択されている値で、移動先のレコードの値も上書きされてしまいます。
データグリッド上でカレントレコードを移動したとき、SelectedValue1とSelectedValue2にID1、ID2の内容が逐次反映されていないためなのかと思います。 上記のような異常が発生している状況なのですが、何かよい解決方法、案はないでしょうか。
よろしくお願いします。
|