Come impostare il valore per la colonna DataGridViewComboBox?

Voglio sapere come impostare il valore di una cella DataGridViewComboBox. Ho già associato DataGridViewComboBox con DataSource. Ma voglio dare nuovo valore a questa fonte di dati.

Questo è quello che ho finora:

gvList.Rows[0].Cells[0].value = "Select"; 

Ma genera un errore che dice: Format Exception: DataGridViewComboBox Il valore della cella non è valido .

Come potrei ottenere ciò senza errori?

L’errore è dovuto al fatto che si è associato un DataSource alla colonna ComboBox e mentre si seleziona Select si sta tentando di individuare lo stesso nel DataSource suo limite. La soluzione migliore è aggiungere lo stesso DataSource originale che si associa alla colonna ComboBox

La causa principale del problema è che il valore “Seleziona” non esiste nell’elenco dei valori della casella combinata. Sarà necessario aggiungerlo all’origine dati per la colonna o all’origine dati per la casella combinata della singola cella (utilizzando il controllo di modifica di tale cella).

Di seguito sono riportate ulteriori spiegazioni sull’impostazione del valore dell’elemento selezionato che ho intenzione di lasciare perché potrebbe risultare utile.

Esistono due modi di base per impostare il valore di un object DataGridViewComboBoxColumn. Utilizzi o l’associazione dati o imposti direttamente il valore.

Sembra che tu stia tentando di impostare direttamente, quindi ti spiegherò che prima e poi di seguito completerò la risposta con il databinding.

Prendendo il seguente esempio forzato:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); BindingList users = new BindingList { new User() { UserName = "Fred", userid = 2 } }; IList values = new List { new MyValue{id = 1, name="Fred"}, new MyValue{id = 2, name="Tom"}}; dataGridView1.DataSource = users; DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); col.DataSource = values; col.DisplayMember = "name"; col.DataPropertyName = "userid"; col.ValueMember = "id"; dataGridView1.Columns.Add(col); } } public class MyValue { public int id { get; set; } public string name { get; set; } } public class User { public string UserName { get; set; } public int userid {get;set;} } 

In questo esempio, ho impostato la proprietà ValueMember come “id” che si riferisce ValueMember dei nomi di proprietà nell’elenco a cui è associato il mio ComboBox.

Quindi tutto quello che devo fare è il seguente (dove sono sicuro che i miei indici di riga e di cella sono corretti – dovresti scrivere il codice per controllarlo):

 dataGridView1.Rows[0].Cells[2].Value = 1; 

Ora, nel mio esempio funziona perché il mio ValueMember è impostato sulla mia proprietà “id” che è un intero, se invece id fosse una proprietà stringa avrei bisogno di impostare un valore come questo:

 dataGridView1.Rows[0].Cells[2].Value = "1"; 

(in realtà ho appena provato questo e gestisce con un cast implicito)

E, naturalmente, vorrei assicurarmi che ci fosse effettivamente un valore di “1” nella mia lista.

Le righe sopra riportate sono la causa diretta del tuo errore : l’elenco che fornisce i valori alla casella combinata non contiene il valore “Seleziona”.

Per impostare il valore utilizzando il databinding, è necessario comunicare a ComboBoxColumn a cosa è vincolante nell’origine dati DataGridView.

Viene eseguita l’impostazione di DataPropertyName di ComboBoxColumn sul nome di una proprietà della class a cui DataGridView è vincolato.

C’è un modo per impostare il valore ma non è consentito se DataSource è impostato.

 DataGridViewComboBoxCell cell =(DataGridViewComboBoxCell)gvList.Rows[0].Cells[0]; cell.Items[0] = "Select"; 

Questo ha funzionato per me

 dim dt as datatable dt=fillMydata() 'do your function 'dt has 2 col myId as myDescription Dim col As DataGridViewComboBoxColumn col = New DataGridViewComboBoxColumn col.HeaderText = "MyHeader" col.Name = "Myname" col.DataSource = data ' col.DisplayMember = "myDescription" col.ValueMember = "myId" col.DropDownWidth = 240 '''''''''''''''''''''''''''''''''''''''''''''' 'set the value col.DefaultCellStyle.NullValue = dt.Rows(0).Item("myDescription").ToString '''''''''''''''''''''''''''''''''''''''''''''' DataGridView1.Columns.Add(col) 

spero che questo aiuto

Prova aggiungendo l’evento

 private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { }