あなたがまだ探しているかどうかはわかりませんが、私はちょうど同じ問題に遭遇しました。これが私がそれに対処した方法です、それがあなたに役立つことを願っています。
適切なデータソースセットを使用してDataGridViewComboCellを返す関数を定義します(他の場所で定義されたコレクションオブジェクト。この例では、データソースにデータを入力するためにEntitySpacesを使用していることに注意してください)。
Private Function GetStockComboDataSource(ByVal type As eStockComboType) As DataGridViewComboBoxCell
Try
Dim cell As New DataGridViewComboBoxCell
Select Case type
Case eStockComboType.StockIn
cell.DataSource = Me.StockInCol.Query.LoadDataTable
cell.DisplayMember = "FullName"
cell.ValueMember = JCStockInMetadata.ColumnNames.StockItemID
Case eStockComboType.StockItem
cell.DataSource = StockItemCol.Query.LoadDataTable
cell.ValueMember = JCStockItemMetadata.ColumnNames.StockItemID
cell.DisplayMember = "FullName"
End Select
Return cell
End Function
コンボデータソースの設定に関しては(たとえば、ここではRowEnterイベントを使用します):
Private Sub dgvStock_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvStock.RowEnter
Try
If IsNumeric(Me.dgvStock.Rows(e.RowIndex).Cells("ID").Value) Then
Dim intValue As Integer = Convert.ToInt32(Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item").Value)
Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item") = GetStockComboDataSource(eStockComboType.StockItem)
Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item").Value = intValue
Else
Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item") = GetStockComboDataSource(eStockComboType.StockIn)
End If
Catch ex As Exception
JCExceptionLogger.LogException(ex)
End Try
End Sub
ここでは、ID列が数値であるかどうかに応じてコンボデータソースを切り替えますが、必要なビジネスロジックを実装できます。コンボ(intValue)を設定する前に、セルの値を保存することに注意してください。これは必要なようです。そうでない場合、コンボは空白として表示されます。