2012-11-19 13 views
7

Non ho trovato una domanda su SO che esattamente corrisponde al mio problema.Errore: "Il valore DataGridViewComboBoxCell non è valido." t DataSource è lista di tipo base

Simile a this question e this question, sto impostando la DataSource su un DataGridViewComboBoxColumn a un elenco di cose. Nel mio caso le cose sono tipi semplici come double e int, quindi le risposte che parlano di ValueMembers e DisplayMembers non mi fanno molto bene. Quando l'utente seleziona un valore, visualizzo il temuto errore "DataGridViewComboBoxCell non valido".

Potrei ingoiare l'errore con un gestore di dati vuoto DataGridView_DataError, ma ovviamente è un brutto modo di procedere.

risposta

18

Ho trovato la risposta here. È anche menzionato in this answer al secondo link nella mia domanda. Quando si imposta il DataSource a un elenco di tutto ciò che non è una stringa, impostare il ValueType della colonna per typeof(<your data type>)

 IList<double> kvChoices; 
     // Populate kvChoices... 
     DataGridViewComboBoxColumn kvCol = 
      dataGridView1.Columns[0] as DataGridViewComboBoxColumn; 
     kvCol.DataSource = kvChoices; 
     kvCol.ValueType = typeof(double); 
+1

Il trucco era ' kvCol.ValueType = typeof (double); 'thanks – 56ka

+1

Nota: in genere configuro le griglie in fase di progettazione. La proprietà ValueType non è disponibile in fase di progettazione, quindi ho inserito il seguente codice nella mia routine Form_Load: gridSequences.Columns [Year.Name] .ValueType = typeof (Int32) –

0

Questo è esigente riguardo sottotipi. Ho ancora ricevuto l'errore quando ValueType era Int, ma DataSource conteneva un SQLServer SMALLINT (che un Visual Studio 2010 Quick-Watch su DataSource diceva era un Int32!). Cambiando la colonna DB da SMALLINT -> INT l'ho risolto per me.

0

Il problema per me era che il valore mia origine dati stava tornando non era disponibile nella casella combinata .... il mio combo aveva un valore 1, 2 e 3 ... ma datasource voluto 4.

Problemi correlati