2016-04-15 26 views
0

DataGridViewgrdBOOK)にDataGridViewComboBoxを追加しました。DataGridViewComboBoxは、ユーザーが選択できるように列3を置き換えます。 DataGridViewComboBoxのデフォルトを列3の値と同じに設定しようとしているので、値が正しい場合はユーザーの選択は不要です。DataGridViewComboBoxの既定値を既存のDataGridView列と同じに設定する

Iはnetから以下のコードを引っ張ったが、私はエラーを取得:

DataGridViewComboBoxCell value is not valid.

私は ComboBox細胞が正常 DataGridViewセルとして扱うことができると思ったが、エラーが発生した(以下のコードを参照)文字列が ComboBox列に追加されたとき?私は数日間ネットとそれを罠に掛けましたが、何もうまくいかず、提案はどうですか?私見 ContextMenuStripを使用して、ネット上の多くの研究の後

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

この「BOOK_COMBO2」メソッドはどこから呼び出していますか? – OhBeWise

+0

さらに重要なのは、その列の値が常に "YEARLY"、 "MONTHLY"、 ""のいずれかのオプションであることを確認してください。値が1つでもない場合は、そのエラーが発生します。はい、大文字と小文字の問題 - 「年間」と「」はエラーを投げます。 – OhBeWise

+0

メインクラスのメソッドを呼び出し、デザイン時にメインフォームにdatagridviewが追加されました。アイテムのリストにエラーがない場合、エラーはdatagridview列の1つからdatagridviewcombobox列に値をコピーすることによって発生します。このコード行は、 '' item.Cells [5] .Value = item.Cells [3] .Value; " – Zeus

答えて

0

は、これを達成するためのより良い方法です。リンクhereContextMenuStripには、より良いメソッド、イベント、プロパティなどがあります。これは他の人がソリューションを探すのに役立つことを願っています。

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;} 
関連する問題