シンプルなコンセプトだと思うものを一日中探してきましたが、それが私が考えていることです。
次のように、データソースとしてDataTableを使用するComboBox列を持つDataGridViewコントロールがあります。
With CType(dgvICS213.Columns(GridCol("CostBasis").Name), DataGridViewComboBoxColumn)
.DataSource = Common.ExecuteQuery("SELECT ID, CostBasis FROM ICS213CostBasis", CommandType.Text)
.DisplayMember = "CostBasis"
.ValueMember = "ID"
End With
データベーステーブルには、コンボボックスの値(ID)が格納されます。
DefaultValuesNeededイベントを使用して、新しい値をDisplayMember(CostBasis)値に設定します。
Dim dgv As DataGridView = sender
CType(e.Row.Cells(GridCol("CostBasis").Index), DataGridViewComboBoxCell).Value = CType(dgv.Columns(GridCol("CostBasis").Index), DataGridViewComboBoxColumn).Items(0).Item(1)
また、DisplayMember値を使用して、データベースクエリから既存の行を埋めます(DataErrorイベントの処理)
これまでのところ、これで問題ありませんが、comboxからエントリを選択すると、DisplayMemberではなくValueMemberがコンボに表示されます。誰かが私がどこで間違っているのか説明できますか?