Je ne sais pas si vous êtes toujours à la recherche mais je viens de rencontrer le même problème. Voici comment je l'ai abordé, j'espère que cela vous sera utile.
Définir une fonction qui renvoie une DataGridViewComboCell avec l'ensemble de la source de données appropriée (objets de collection définis ailleurs, notez que j'utilise EntitySpaces dans cet exemple pour alimenter le DataSource):
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
Maintenant, quand il s'agit de le réglage de la DataSource combo (j'utilise l'événement RowEnter ici par exemple):
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
ici je passe le DataSource combo selon que la colonne ID est numérique, mais vous pouvez mettre en œuvre quelle que soit la logique des affaires dont vous avez besoin. Notez que je sauvegarde la valeur de la cellule avant de définir le combo (intValue). Cela semble être nécessaire sinon le combo s'affichera comme vide.
Cela aide un peu, mais comment puis-je afficher du texte dans la cellule et à DataSource enregistrer la valeur entière (id)? –
Découvrez les propriétés ValueMember et DisplayMember, vous pouvez les utiliser dans ce but précis. – Simon