環境: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
a) 受付日チェックや返却日チェックを,GetType(String)ではなくGetType(Boolean)で定義する
b) 作成したBindオブジェクトのFormatおよびParseイベントを処理する
のどちらかかと。
CheckedプロパティにバインドするならBoolean型でないといけません。
a)案は元のデータをBooleanにしてしまう方法で,b)案はバインドの反映時に修正する方法です。
オリジナルのデータに合わせてどちらがよいかが決まります。
# WPF等のIValueConverterが無いのでちょっと面倒くさい……。
> TXT_管理番号.DataBindings.Add("Text", "仕様書_T", "管理番号")
ここがなぜ正常に動作しているが不思議ですが
> TXT_管理番号.DataBindings.Add("Text", "仕様書_T", "管理番号")
> CHK_G受取日.DataBindings.Add("Checked", "仕様書_T", "受付日チェック")
> CHK_G返却日.DataBindings.Add("Checked", "仕様書_T", "返却日チェック")
ここの『"仕様書_T"』の部分を『BindingSource1』にすれば良いと思います。バインドするデータを指定しないと駄目です。
YuO様、shu様、ご回答ありがとうございます。
YuO様に教えて頂いたa)のパターンでBoolean型として、表示させる事が
できました。
ありがとうございました!
shu様、なぜか動作しているようです。
といいますか、掲載する為にいろいろプログラムを削っているからで
しょうか、、、
ご指摘ありがとうございました!
尚、もう1点だけ別の質問をさせていただきました。
またわかりましたらご回答頂ければ幸いです。
ツイート | ![]() |