投稿者 魔界の仮面弁士  (社会人) 投稿日時 2019/3/15 15:37:33
> ここで、デバッグ実行した際のForm上のComboBoxの初期値が「aaa」となり、画面上で例えば「xxx」と修正ができますが、この修正をした「xxx」という値をDataTableに更新したい、という意味なのです。

DropDownList ではなく DropDown スタイルの時の話でしたよね。

編集直後にドロップダウンすると、どのアイテムも選択されていない状態になっていると思います。

これはテキスト部をユーザーが書き換えた瞬間、
 SelectedIndex は -1
 SelectedItem は Nothing (SelectedValue も同様)
という「未選択」の状態に変更されていることを意味しています。

編集対象のレコードが無いため、編集結果が DataTable に伝わることはありません)


ゆえに例えば、バインド元(先の私の例なら BindingSource)から元のレコード位置を調べ、
そこに、ComboBox の編集結果を反映させるようなコードが必要です。

プログラムから編集する方法は既に示していますので、後はそれを組み込むだけですよね。

先の例ですと、DataSource に BindingSource を割り当てていますので、たとえばこんな感じにできるでしょう。
If ComboBox1.SelectedIndex = -1 AndAlso BindingSource1.Position <> -1 Then
    Dim row = DirectCast(BindingSource1.Current, DataRowView).Row
    row("DataColumn2") = ComboBox1.Text
    BindingSource1.EndEdit()
End If



この処理をどこに組み込むのは、どの時点で確定させたいかに応じて開発者側で決めてください。
たとえば入力値の確定という観点からは、ComboBox1 の Validated イベントあたりが
良いのではないでしょうか。即時性が求められるなら TextUpdate イベントも使えます。

その他、Enter キー押下で確定させたいとか、確定前に Esc を押した時には、
編集中の内容を取り消したいといった要件が出てくるかもしれませんが、
そういった調整は、必要に応じて適宜組み込んでみてください。