>Salve a tutti, ho questo problema.
>Nel form ho una DataGridView con x colonne. Dalla proprietà della
>DataGridView ho impostato
>i nomi delle colonne che mi servono, mentre a runtime imposto
>il valore DataPropertyName.
>Una di queste colonne l'ho impostata come DataGridViewComboBoxColumn
>sempre tramite le
>proprietà dell'oggetto.
>A Runtime ho fatto il binding della colonna combo con i dati
>che prelevo ed anche il binding
>della DataGridView è fatto a runtime, di seguito riporto un po
>di codice :
>
>'binding della DataGridView
> bindingSource1.DataSource = table
> Grid.Columns(0).DataPropertyName = "Gi"
> Grid.Columns(1).DataPropertyName = "Ora"
> Grid.Columns(2).DataPropertyName = "Hs"
> Grid.Columns(3).DataPropertyName = "Ts"
> Grid.Columns(4).DataPropertyName = "Dw"
>
> Dim ColonnaCombo As DataGridViewComboBoxColumn
> 'estraggo i dati che mi servono per la combo
> PreparaCombo()
> ColonnaCombo = Grid.Columns(5)
>ColonnaCombo .DataPropertyName = "fi" 'campo presente nel bindingSource1
>ColonnaCombo .DataSource = dt ' datatable con i
>dati che ho estratto
> ColonnaCombo .DisplayMember = "cognome"
> ColonnaCombo .ValueMember = "id"
>Quello che non riesco a fare è inserire una riga vuota con un
>valore tipo -1 in modo
>che non vada in errore il caricamento della DataGridView quando
>il cambo impostato
>nella DataPropertyName ha un valore non presente all'interno
>della combobox
>perchè all'inizio i dati visualizzati nella combo non sono completi
>e potrei riempire il campo
>specifico con un valore -1, o in alternativa
>a gestire l'errore in DataError in modo che non si blocchi la
>creazione della DataGridView
>quando trova un valore non presente nella combo.
>
>L'applicazione è sviluppata con vb.net 2005, il database è MsSql
>
>Grazie per qualsiasi consiglio
>
E' il classico e ricorrente problema nell'utilizzo delle combobox in binding con una DataTable.
Basta che aggiungi al DataTable il record con il valore a -1.
Un esempio:
Dim Tbl As DataTable
' Crei il tuo DataTable da collegare alla combo
...
' Aggiungi il Record al tuo DataTable prima di effettuare il binding con la combobox
Dim NewRow as DataRow
NewRow=Tbl.Rows.Add()
NewRow.Item("ID")=-1
' Se vuoi che il record vuoto venga visualizzato per primo nella tua combo basta
' che crei un DataView derivante dalla tua tabella ordinato per il campo ID
Dim DtView As New DataView
DtView.Table = Tbl
DtView.Sort = "ID"
' Ora colleghi il tuo DataView alla combo
TuaCombo.DataSource = DtView
TuaCombo.DisplayMember = "Descrizione"
TuaCombo.ValueMember = "ID"
Spero di aver centrato il problema e di esserti stato di aiuto.
Ciao
Alessandro
http://blogs.dotnethell.it/alebadalin