プロが教えるわが家の防犯対策術!

お世話になります。
VB.Net 駆け出しの者です。

コンボボックスのDataSourceがSQL Serverのデータであります。
データを登録したら、そのデータが反映した内容のコンボボックスにしたいのですが、

Me.コンボボックス.DataSource = Nothing
Me.コンボボックスのBindingSource.ResetBindings(False)
Me.コンボボックス.DataSource = Me.コンボボックスのBindingSource

上記を実行しても、登録したデータがデータソースに反映してないのです。
そのフォームを一度閉じて、再度開くとデータは反映しております。
Access で言うところの ReQuery のようなことができないかと質問させていただきました。

上記のコードで問題があったり、別のコードで実現できるなどお分かりになる方がいらっしゃいましたら、何卒ご教授いただければと存じます。

よろしくお願いいたします。

A 回答 (2件)

>>Me.コンボボックス.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.バインディングソース, "コンボボックス", True))



これは、コントロールとデータソースを結びつけている命令です。これを入れても、DBから読み込み処理してくれません。

それではなく、以下のような感じの命令がForm_Loadの中にあるのではないでしょうか?

Me.xxxTableAdapter.Fill(Me.dataSet.xxxTable)

このTableAdapterの中で記述されているSQL命令により、データセットの中のテーブルにデータが読み込まれていると思いますので、それを実行すればいいのではないかと思います。

(私が使っているのはC#なので、いくらか差があるとは思いますが、基本は同じはずなので・・・)

>>Designer画面以外で、なにか設定している箇所があるということでしょうか?

いえ、Designer画面のコードの中にたぶんあると思います。

ただ、プログラムの作りによっては、どこかの初期処理クラスの中でやっていて、わかりにくくなっているのかもしれませんが・・・。
    • good
    • 0
この回答へのお礼

lv4u さん お世話になります。

Me.xxxTableAdapter.Fill(Me.dataSet.xxxTable)

ご指摘のコードは Form Load の先頭にありました。
灯台下暗しとはこの事でした^^;

このコードでSQLから新たにデータを取得するんですね!
大変勉強になりました。
ありがとうございました。

お礼日時:2013/09/14 08:42

>>上記を実行しても、登録したデータがデータソースに反映してないのです。



上記を実行しても、それはSQLServerからのデータを新たに読み込むコードを実行しないので反映しないのでしょう。
そして、フォームを閉じて、再度開くと、その中でSQLServerからのデータを読み込むから反映するということだと思います。

VB.Netは、Accessと違って、データセット内のデータテーブル(メモリーデータベース?)を間にはさんでいます。
たぶん、上記命令は、そのデータテーブルからデータから読み込むけど、SQLServerからデータテーブルには読み込んでないのだと推測します。
なので、フォームを開くときに実行されている(と思える)SQLServerからの読み込み命令を探して、それをコピーして実行すれば表示されるのではないでしょうか?

この回答への補足

lv4u さん お世話になります。

フォームのDesigner画面を開き、該当するコンボボックスの初期設定を見てみると、

Me.コンボボックス.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.バインディングソース, "コンボボックス", True))
Me.コンボボックス.DataSource = Me.バインディングソース

この記述があったので、このコードの前にこれを追加して
Me.コンボボックス.DataBindings.Clear()

実行したのですが、やっぱり登録したてのデータが反映されてませんでした;;

Designer画面以外で、なにか設定している箇所があるということでしょうか?

補足日時:2013/09/13 20:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!