VB.Net ResetBindings リクエリ

このQ&Aのポイント
  • VB.NetでコンボボックスのDataSourceを更新する方法について質問です。
  • コンボボックスのDataSourceをリセットしてデータを反映させる方法を知りたいです。
  • VB.Netで登録したデータがコンボボックスのDataSourceに反映されない問題が発生しています。解決方法を教えてください。
回答を見る
  • ベストアンサー

VB.Net ResetBindings リクエリ

お世話になります。 VB.Net 駆け出しの者です。 コンボボックスのDataSourceがSQL Serverのデータであります。 データを登録したら、そのデータが反映した内容のコンボボックスにしたいのですが、 Me.コンボボックス.DataSource = Nothing Me.コンボボックスのBindingSource.ResetBindings(False) Me.コンボボックス.DataSource = Me.コンボボックスのBindingSource 上記を実行しても、登録したデータがデータソースに反映してないのです。 そのフォームを一度閉じて、再度開くとデータは反映しております。 Access で言うところの ReQuery のようなことができないかと質問させていただきました。 上記のコードで問題があったり、別のコードで実現できるなどお分かりになる方がいらっしゃいましたら、何卒ご教授いただければと存じます。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.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画面のコードの中にたぶんあると思います。 ただ、プログラムの作りによっては、どこかの初期処理クラスの中でやっていて、わかりにくくなっているのかもしれませんが・・・。

kyokotan12
質問者

お礼

lv4u さん お世話になります。 Me.xxxTableAdapter.Fill(Me.dataSet.xxxTable) ご指摘のコードは Form Load の先頭にありました。 灯台下暗しとはこの事でした^^; このコードでSQLから新たにデータを取得するんですね! 大変勉強になりました。 ありがとうございました。

その他の回答 (1)

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

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

kyokotan12
質問者

補足

lv4u さん お世話になります。 フォームのDesigner画面を開き、該当するコンボボックスの初期設定を見てみると、 Me.コンボボックス.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.バインディングソース, "コンボボックス", True)) Me.コンボボックス.DataSource = Me.バインディングソース この記述があったので、このコードの前にこれを追加して Me.コンボボックス.DataBindings.Clear() 実行したのですが、やっぱり登録したてのデータが反映されてませんでした;; Designer画面以外で、なにか設定している箇所があるということでしょうか?

関連するQ&A

  • VB2005 DataGrdViewで、SQL文記述

    VB6からVB2005に切り替える作業をしています。 DataGridViewにMDBファイルの中身を表示させることは出来ました。 DataSet,BindingSourceを用いています。 コードの記述で、SQLの文章を変更させたいのです。 WHERE文の記述を変えたりしたいのですが。 DataSourceにSQL文を記入することが出来ません。 DataSourceには記述できないのでしょうか? それとも、根本的に間違っているのでしょうか。 よろしくお願いいたします。

  • Accessのフォーム その2

    すいません、以前にも同じ質問をしたのですが、私の質問の仕方が悪くてうまくいきませんでした。 回答してくださった方、ありがとうございました! もう一度、詳しく質問しなおします。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 しかし、選んだデータの[A]しかテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、[B]のコンボボックスから選択しようとしても空っぽです。 テーブルを見ると、[A]で選んだ[1010]だけが表示されています。 非連結のときはうまく出てたんですが・・。 もしかして連結列が間違ってるのでしょうか?? 元になるテーブルは Aコード A  Bコード B Aコード Cコード C Bコード Dコード D Cコード この2列目を表示したいのです。(2列目が[1010]など表示したいデータ) 列数はそれぞれ「2」で連結列は「2」です。 更新後処理は以下の通りです。 Private Sub コンボ0_AfterUpdate() Me!コンボ2.Requery End Sub Private Sub コンボ2_AfterUpdate() Me!コンボ4.Requery End Sub Private Sub コンボ4_AfterUpdate() Me!コンボ6.Requery End Sub ぜひよろしくお願いします。

  • VB+Acceessのワイルドガード

    VBのDataGridViewにAcceessのテーブルを表示させています。 ワイルドカードを使ってデータ抽出をしたいのですがうまくいきません。 ワイルドカードを使わないで完全一致なら表示できます。 ○  Me.アクセスデータBindingSource.Filter = "タイトル='アクセスの本'" ←問題なし ×  Me.アクセスデータBindingSource.Filter = "タイトル='*アクセス*'" ←0件 ×  Me.アクセスデータBindingSource.Filter = "タイトル='%アクセス%'" ←0件 ×  Me.アクセスデータBindingSource.Filter = "タイトル=*'アクセス'*" ←エラーになる(構文エラー : 'Mod' 演算子の前にオペランドがありません。) ×  Me.アクセスデータBindingSource.Filter = "タイトル=%'アクセス'%" 上記と同じエラー となってしまいます。 どうすればあいまい検索ができるのでしょうか? ご教授よろしくお願い致します。

  • データグリッドビューの任意の列を削除

    VB2010にて、下記のコードを実行すると、左端にいらない列が表示されます。 左端にコンボボックスを表示したいのですが、うまくいきません。 左端の列を削除する方法。 または、左端にコンボボックスを表示する方法を教えていただけませんでしょうか。 ご存知の方、どうぞよろしくお願いいたします。 '■■■データグリッドビューセット■■■ '初期化 Me.DataGridView1.Columns.Clear() '最下部の新しい行を非表示 Me.DataGridView1.AllowUserToAddRows = False '行追加 Me.DataGridView1.RowCount = 気筒数 + 2 'コンボボックス列を追加 Dim i As Integer Dim BS As New BindingSource() For i = 1 To 系列数 BS.Add(系列名(i)) Next i Dim ComboBox As New DataGridViewComboBoxColumn() ComboBox.HeaderText = "系列名を選択" ComboBox.DataSource = BS Me.DataGridView1.Columns.Add(ComboBox) Me.DataGridView1.Columns(0).Width = 110

  • コンボボックスで新規登録する場合

    こんにちはアクセス初心者です。 コンボボックスの扱いについて行き詰っています。 説明が下手ですがどうぞよろしくおねがいします フォームAで コンボAとコンボBの 2つのコンボボックスを連動しています コンボAで選んだ発注者名を選択して詳細項目を表示し、 その担当者をコンボBで絞込み 担当者の詳細情報を表示しています コンボAに項目がない場合、 別ウィンドウで入力フォームが開き 新規登録後、その値が即座に反映され、 コンボBにはその抽出された値が表示され、 更にコンボBに項目が無い場合も同様に 登録作業をしたいのですが どういう方法が一番いいのでしょうか? 一番の理想としては コンボAを選択すると A社 B社 C社 新規登録 というようなリストが表示され 新規登録を選択すると 別ウィンドウで登録フォーム開き 複数項目を入力、OKを押すとその内容が フォームAに反映され コンボBの選択へ。 コンボBには 田中 佐藤 新規登録 と表示されている状態が理想です コンボAで顧客コードを選択すると 他の内容を下記のように VBAでフォーム上のテキストボックスに反映させています Private Sub コンボA_AfterUpdate() Me!担当者名コンボ.Requery '内容反映 Me.〒 = Me.顧客名コンボ.Column(2) Me.現住所 = Me.顧客名コンボ.Column(3) Me.電話番号 = Me.顧客名コンボ.Column(4) コンボA SELECT 顧客マスタ.顧客コード, 顧客マスタ.顧客名, 顧客マスタ.〒, 顧客マスタ.現住所, 顧客マスタ.電話番号 FROM 顧客マスタ ORDER BY 顧客マスタ.顧客コード; コンボB SELECT 担当者マスタ.担当者コード, 担当者マスタ.担当者名, 担当者マスタ.携帯番号, 担当者マスタ.顧客コード FROM 担当者マスタ WHERE (((担当者マスタ.顧客コード)=[forms]![フォームA]![コンボA])) ORDER BY 担当者マスタ.担当者コード; 別ボタンで新規登録をつくり リストに無い場合はフォームを表示させ テーブルに保存させるという方法も試しましたが デザイン上の問題があって とても小さなスペースしかとれず、 コマンドボタンをおくスペースもとるのが難しい感じなので できればコンボボックスだけで解決したいのですが。。 どなかた教えていただけると助かります どうぞよろしくおねがいいたします

  • vb ado → vb2005 ado.net変換

    お世話になります。初めて投稿させていただきます。 VB6.0で下記のようなコードでコンボボックスcboMakerへフィールド値を格納しているのですがこのコードをVB2005のado.netで記述したいのですが可能でしょうか?可能であればどのようなコードを書けばよいのでしょうか。フィールドの値を1レコードづつ取得することは可能なのでしょうか? 初心者ですみません。宜しくお願いします。 Dim con As ADODB.Connection Dim rec As ADODB.Recordset Dim sql As String Dim recCnt As Long con = New ADODB.Connection con.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & パス con.Open() rec = New ADODB.Recordset sql = "SELECT * FROM " & テーブル名 rec.Open(sql, con, adOpenStatic, adLockReadOnly) If rec.RecordCount < 1 Then 'レコードが存在しない MsgBox("未登録です。", G_MB_CAUTION, G_SYSTEM_NAME) Exit Function Else ReDim CboMakerId(rec.RecordCount) End If 'コンボボックスに値を挿入 ※「.List(recCnt)」から値を挿入する With Me.cboMaker .Clear() recCnt = 0 .List(recCnt) = "" .ItemData(recCnt) = 0 Do Until rec.EOF recCnt = recCnt + 1 .List(recCnt) = rec("Name") .ItemData(recCnt) = rec("ID") rec.MoveNext() Loop End With Me.cboMaker.ListIndex = 0 rec.Close() : rec = Nothing con.Close() : rec = Nothing End Function

  • 2つのコンボボックスを含むフィルタをかけたい(and検索)

    こんばんは。 VB2008です。 フォーム上に2つのコンボボックスがあります。 Sub フィルタ() Form1.TメインBindingSource.Filter = "進捗 LIKE '*" & Form1.進捗.Text & "*'" Form1.TメインBindingSource.Filter = "番号 LIKE '*" & Form1.番号.Text & "*'" End Sub を実行して、、「進捗」と「番号」コンボボックスに入力されている値のフィルタをかけたいのですが 上記のコート゛だと進捗コンボボックスの値は無視され、番号コンホ゛ホ゛ックスの値しか取得できません。 なので Sub フィルタ() Form1.TメインBindingSource.Filter = "進捗 LIKE '*" & Form1.進捗.Text & "*'"  and Form1.TメインBindingSource.Filter = "番号 LIKE '*" & Form1.番号.Text & "*'" End Sub としてみましたが、 andの部分がエラーになります。 どうすればand検索ができるのでしょうか? よろしくお願い致します。

  • コンボボックスを選択したい

    VB2008で開発しています。 Me.cmb1.DataSource = tableData1 Me.cmb1.DisplayMember = "名前" Me.cmb1.ValueMember = "ID" としてコンボボックスにテーブルデータを セットしました。 IDが"2"のデータを選択状態にしたいのですが どうしたらよいでしょうか。

  • サブフォームでのテキストとコンボ連動について

    ACCESS2002でDBを構築している初心者です。 メインフォームに2つのサブフォーム(サブ1、サブ2)埋め込みを サブフォーム同士を連動させたフォームを作成中です。 2つのサブフォームのうちのサブ1にテキストボックスを基に コンボボックスでSQLを実行して抽出結果を コンボボックスに表示させています。 下記でaの値が変更されるとbにその値を送っています。 Private Sub a_AfterUpdate() DoCmd.Requery "b" Me!a.Requery End Sub その後bの値集合ソースでSQLを実行しております。 SQLの抽出条件「forms!サブ1!a」として、上記で取得した テキストボックスaを使用しております。 サブ1をメインフォームで開き上記を実行すると値を抽出します。 しかしサブフォームで実行した際に、「パラメータの入力」が 出てきて手動で入力しなくてはいけません。 サブフォーム上で実行する際に、イベントプロシージャや SQLの抽出条件を更新しなくてはならないのでしょうか。 お手数おかけいたしますが、ご教授よろしくお願いいたします。

  • アクセス2000で2回目の検索ができなくなります

    アクセス2000で、サンプルを見ながらVBAをみようみまねで書いている超初心者です(難しいことは理解できていません)。次のようなところで行き詰っています。ヘルプお願いします。 一つのフォームに、(1)コンボボックス2つで、2段階の絞り込みをするクエリ(全体から「種類」フィールドのAを抽出し、さらに「名前」フィールドからBに絞り込む) と、(2)オプショングループのフレームの中で五十音で検索するトグルボタン(「かな」フィールドからあ行、か行等を抽出) のふたつのフィルタを設置しています。 コンボボックスのほうには、絞り込みの解除のボタン(ここでは「再表示」とします)を設置しており、クリック時のイベントに Private Sub コマンド1_click() me.コンボ1=null me.コンボ2=null DoCmd.Requery End Sub と記述し、「再表示」ボタンを押すことで、何度もやり直しができています。 しかし、五十音検索を一度でも行うと、その後はコンボボックスの絞り込みが動かなくなってしまうのです。 そこで、こちらにも「全表示」ボタンをつくって、以下のような記述をしてみたのですが、いずれもコンボボックスによる絞り込みを復活させることができないでいます。どこが足りないのかわかりません。 1) Private Sub コマンド2_click() me.フレーム1=null me.フレーム2=null DoCmd.Requery End Sub これでトグルの選択は解除されますが、コンボボックスは動きません。よって3行目以降が間違っていると思い、 2)上記の3行目以降を DoCmd.ShowAllRecords や Me.FilterOn=false  など、またそれらとReQueryなどを組み合わせてみたり、 3)コンボボックスの方に1)や2)のような記述を追加してみたりと、いろいろトライしていますが、どうしてもコンボボックスの動作が復活しないのです。 いったんフォームを閉じるとまたできるようになるのですが・・・どうすればよいか、ご教示をお願いいたします。 ps.VBAのお作法はほとんどわかっていません。なるべくわかりやすくお願いいたします。   ちなみに、MSのサイトで[ACC2000]フィルタが設定されたフォームで2回目以降のフィルタが実行されない というヘルプは参照したのですが、意味が分かりませんでした(泣)  また、なぜこの時代にアクセス2000なのか、ですが、いまだに会社のバージョンがこれなのです(苦笑)

専門家に質問してみよう