2016-04-15 4 views
0

Ich habe eine DataGridViewComboBox zu einem gebundenen DataGridView (grdBOOK) hinzugefügt, ersetzt die DataGridViewComboBox Spalte 3 für die Benutzerauswahl zu ermöglichen. Ich habe Mühe, den Standardwert von DataGridViewComboBox gleich dem Wert von Spalte 3 zu setzen, so dass die Benutzerauswahl nicht erforderlich ist, wenn der Wert korrekt ist.Set DataGridViewComboBox Standard gleich vorhandenen DataGridView Spalte

zog ich den Code aus den net, aber ich erhalte eine Fehlermeldung:

DataGridViewComboBoxCell value is not valid.

Ich dachte, eine ComboBox Zelle als normale DataGridView Zelle behandelt werden kann, aber (siehe Code unten) wird ein Fehler erzeugt wenn ein String zur ComboBox Spalte hinzugefügt wird? Ich habe das Netz und SO für ein paar Tage durchsucht, aber nichts funktioniert, irgendwelche Vorschläge bitte?

public void BOOK_COMBO2()  
     { 
      DataGridViewComboBoxCell cb_cell = new DataGridViewComboBoxCell(); 
      DataGridViewComboBoxColumn cb_col = new DataGridViewComboBoxColumn(); 

      // Contract field 
      cb_col.Items.AddRange("YEARLY", "MONTHLY", ""); 
      cb_col.FlatStyle = FlatStyle.Flat; 
      cb_col.HeaderText = "newCONTRACT"; 
      cb_col.Width = 50; 
      cb_col.ValueType = typeof(string); 

      // Add ComboBox and test 
      grdBOOK.Columns.Insert(5, cb_col); 
      grdBOOK.Rows[14].Cells[4].Value = "zzz";  // No error adding string to normal dgv column 
      grdBOOK.Rows[14].Cells[5].Value = "xxx";  // Error adding string to dgvcombobx column 

      //copy old values to new combobox and set as default 
      foreach (DataGridViewRow item in grdBOOK.Rows) 
      { 
       item.Cells[5].Value = item.Cells[3].Value;  
      } 
      //hide original column 
      grdBOOK.Columns[3].Visible = false; 
     } 
+0

Woher rufen Sie diese 'BOOK_COMBO2' Methode? – OhBeWise

+0

Überprüfen Sie außerdem und wichtiger, dass die Werte in dieser Spalte immer eine Ihrer Optionen sind: '" JAHR "," MONATLICH "," ". Sie erhalten diesen Fehler, wenn ein Wert keiner davon ist; und ja, Groß- und Kleinschreibung - "Jährlich" und "" werden den Fehler auslösen. – OhBeWise

+0

Ich rufe die Methode aus der Main-Klasse und die Datagridview wurde zur Entwurfszeit zum Hauptformular hinzugefügt. Ich bekomme keine Fehler mit der Liste der Elemente, der Fehler wird durch das Kopieren von Werten aus einer der datagridview-Spalten in die Spalte datagridviewcombobox verursacht. Diese Codezeile: '' item.Cells [5] .Value = item.Cells [3] .Value; "" – Zeus

Antwort

0

Nach mehr Forschung auf dem Netz, IMHO ein ContextMenuStrip verwendet, ist eine bessere Methode, dies zu erreichen. Link here. A ContextMenuStrip hat bessere Methoden, Ereignisse, Eigenschaften usw. Ich hoffe, dass dies hilft anderen auf der Suche nach einer Lösung.

0
private void dataGridView1_DataError(object sender, 
      DataGridViewDataErrorEventArgs e) 
     { 
      // If the data source raises an exception when a cell value is 
      // commited, display an error message. 
      if (e.Exception != null && 
       e.Context == DataGridViewDataErrorContexts.Commit) 
      { 
       MessageBox.Show(""); 
      } 
     } 




private void Form1_Load(object sender, EventArgs e) 
    { dataGridView1.DataError += 
       dataGridView1_DataError;}