Penso di aver risolto il mio dubbio...nel codice, di esempio, sotto:
con "button1" ottengo i valori della colonna e li aggiungo alla combo senza duplicati, utile se non conosco i dati a prescindere...
con "button2", aggiungo i valori che voglio "io" alla combo, se nel dataset non corrispondono l' errore viene gestito da "errore_DataGridView1" che è solo un' abbozzo da rifinire...
Ogni critica o suggerimento e ben accetta:
codice:
Public Class Form1
Dim ds As New DataSet
Private Sub Form1_Load() Handles MyBase.Load
'creo il dataset
ds.DataSetName = "prova"
ds.Tables.Add("colonne")
ds.Tables("colonne").Columns.Add("nome")
ds.Tables("colonne").Columns.Add("testo")
'riempo "al volo" il dataset con valori duplicati
Dim riga(1) As String
For a = 0 To 1
For b = 1 To 3
riga(0) = "nome" & b
riga(1) = "testo" & b
ds.Tables("colonne").Rows.Add(riga)
Next
Next
End Sub
'se non conosco i dati
Private Sub Button1_Click() Handles Button1.Click
Dim colonna_nome As New DataGridViewComboBoxColumn
colonna_nome.HeaderText = "nome"
'aggiungo i valori senza duplicati
For Each row As DataRow In ds.Tables("colonne").Rows
If Not colonna_nome.Items.Contains(row.Item("nome").ToString) Then
colonna_nome.Items.Add(row.Item("nome").ToString)
End If
Next
Dim colonna_testo As New DataGridViewTextBoxColumn
colonna_testo.HeaderText = "testo"
DataGridView1.Columns.Add(colonna_nome)
DataGridView1.Columns.Add(colonna_testo)
DataGridView1.AutoGenerateColumns = False
DataGridView1.DataSource = ds.Tables("colonne")
DataGridView1.Columns(0).DataPropertyName = "nome"
DataGridView1.Columns(1).DataPropertyName = "testo"
End Sub
'se conosco i dati
Private Sub Button2_Click() Handles Button2.Click
Dim colonna_nome As New DataGridViewComboBoxColumn
colonna_nome.HeaderText = "nome"
'genera l' errore
colonna_nome.Items.Add("nome1 errore")
colonna_nome.Items.Add("nome2")
colonna_nome.Items.Add("nome3")
colonna_nome.Items.Add("nome4")
Dim colonna_testo As New DataGridViewTextBoxColumn
colonna_testo.HeaderText = "testo"
DataGridView1.Columns.Add(colonna_nome)
DataGridView1.Columns.Add(colonna_testo)
DataGridView1.AutoGenerateColumns = False
DataGridView1.DataSource = ds.Tables("colonne")
DataGridView1.Columns(0).DataPropertyName = "nome"
DataGridView1.Columns(1).DataPropertyName = "testo"
End Sub
'gestisco l' errore
Private Sub errore_DataGridView1(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
DataGridView1.Rows(e.RowIndex).ErrorText = "valore non valido"
DataGridView1.Rows(e.RowIndex).SetValues("")
End Sub
End Class