SelectedItem の代わりに SelectedValue プロパティを使用して解決しました。このプロパティを使用できるようにするには、ComboBox の .ValueMember を設定する必要があるため、ComboBox アイテムのリストで単純な文字列ではなく、プロパティを持つオブジェクトを使用する必要がありました。クラスを作成しました:
Public Class ComboItem
Private cText As String
Private cValue As Object
Public Sub New(ByVal text As String, ByVal value As Object)
Me.cText = text
Me.cValue = value
End Sub
Public Sub New(ByVal text As String)
Me.cText = text
Me.cValue = text
End Sub
Public Property value() As Object
Get
Return cValue
End Get
Set(ByVal value As Object)
cValue = value
End Set
End Property
Public Property text() As String
Get
Return cText
End Get
Set(ByVal value As String)
cText = value
End Set
End Property
End Class
そして、次のようにバインディングを設定します。
Dim itemList As List(Of ComboItem) = New List(Of ComboItem) From {New ComboItem("", DBNull.Value),
New ComboItem("Item 1"),
New ComboItem("Item 2")}
Dim bindingSource As BindingSource = New BindingSource
bindingSource.DataSource = itemList
ComboBox1.DataSource = bindingSource
ComboBox1.DisplayMember = "text"
ComboBox1.ValueMember = "value"
dataGridViewTextBoxColumn.DataSource = bindingSource
dataGridViewTextBoxColumn.DisplayMember = "text"
dataGridViewTextBoxColumn.ValueMember = "value"
デザイナーから SelectedValue バインディングを設定しましたが、コードは次のようになります。
ComboBox1.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", dataGridViewBindingSource, "ColumnName", True))
私の知る限り、SelectedItem メソッドは同じように機能するはずなので、この回答は実際には回避策に似ています (間違っている場合は修正してください!)。