DataBindings.Addに関して

解決


misamisa  2012-12-10 14:22:02  No: 148004  IP: [192.*.*.*]

環境:Visual Basic 2008

データベースから取得した値を画面上に表示させるようなことをしています。

その際に、データテーブルへバインドするような方法をとっていますが、普通のテキストに
表示する事は全く問題ありませんが、チェックボックスの値を正しくチェックの有無がわかるように
紐付けするにはどのような記述をすれば良いでしょうか、、、

DataBindings.Add("Checked",   で表示されるかと思っていましたが、、、

初歩的な質問で申し訳ありません。

教えて下さい。

《現在の記述内容》

'データセットにテーブルを追加する
dtTable = dtSet.Tables.Add("仕様書_T")

'テーブルにフィールドを追加する
'.Add("フィールド名", フィールドの型)で追加します
dtTable.Columns.Add("管理番号", Type.GetType("System.String"))
dtTable.Columns.Add("受付日チェック", Type.GetType("System.String"))
dtTable.Columns.Add("返却日チェック", Type.GetType("System.String"))

Dim Connection As New OracleConnection
Dim Command As New OracleCommand

Try

    'Oracleへのコネクションの確立
    Connection.ConnectionString = "User Id=XXXXXX; Password=999999; Data Source=XE"

    'オープン  
    'Connection.Open()

    'コマンド作成  
    Command.Connection = Connection

    Try

        Dim Select_SQL As String

        'SQL文作成
        Select_SQL = "select 管理番号,受付日チェック,返却日チェック from T_仕様書"
 
       Dim adp As New OracleDataAdapter(Select_SQL, Connection)

        dtSet.Clear()

        adp.Fill(dtSet, "仕様書_T")

        'BindingSource1.DataSource = "品目マスタ_T"
        TXT_管理番号.DataBindings.Add("Text", "仕様書_T", "管理番号")
 
        CHK_G受取日.DataBindings.Add("Checked", "仕様書_T", "受付日チェック")
        CHK_G返却日.DataBindings.Add("Checked", "仕様書_T", "返却日チェック")


        'データソースを連結する
        BindingSource1.DataSource = dtSet
        BindingSource1.DataMember = "仕様書_T"

        DP_仕様書.DataMember = BindingSource1.DataMember
        DP_仕様書.DataSource = BindingSource1.DataSource

編集 削除
YuO  2012-12-10 16:11:09  No: 148005  IP: [192.*.*.*]

a) 受付日チェックや返却日チェックを,GetType(String)ではなくGetType(Boolean)で定義する
b) 作成したBindオブジェクトのFormatおよびParseイベントを処理する
のどちらかかと。
CheckedプロパティにバインドするならBoolean型でないといけません。
a)案は元のデータをBooleanにしてしまう方法で,b)案はバインドの反映時に修正する方法です。
オリジナルのデータに合わせてどちらがよいかが決まります。
# WPF等のIValueConverterが無いのでちょっと面倒くさい……。

編集 削除
shu  2012-12-10 16:25:01  No: 148006  IP: [192.*.*.*]

>  TXT_管理番号.DataBindings.Add("Text", "仕様書_T", "管理番号")
ここがなぜ正常に動作しているが不思議ですが

> TXT_管理番号.DataBindings.Add("Text", "仕様書_T", "管理番号")
> CHK_G受取日.DataBindings.Add("Checked", "仕様書_T", "受付日チェック")
> CHK_G返却日.DataBindings.Add("Checked", "仕様書_T", "返却日チェック")
ここの『"仕様書_T"』の部分を『BindingSource1』にすれば良いと思います。バインドするデータを指定しないと駄目です。

編集 削除
misamisa  2012-12-10 17:18:58  No: 148007  IP: [192.*.*.*]

YuO様、shu様、ご回答ありがとうございます。

YuO様に教えて頂いたa)のパターンでBoolean型として、表示させる事が
できました。

ありがとうございました!

shu様、なぜか動作しているようです。

といいますか、掲載する為にいろいろプログラムを削っているからで
しょうか、、、

ご指摘ありがとうございました!


尚、もう1点だけ別の質問をさせていただきました。

またわかりましたらご回答頂ければ幸いです。

編集 削除