2017-07-26 64 views
0

先週この同じ質問をしたところ、ユーザー@Aaronのおかげで問題が解決されました。しかし、コードはが完全にの1つのプロジェクトで動作しますが、ほぼ同じ条件(つまり、列数/行数、変数のタイプ、DGVの入力方法)では別のプロジェクトでは機能しないため、 。DataGridViewの特定のセルにComboBoxを設定

//This is my code to go through each cell in the DataGridView. 
for (int i = 0; i < dgvTest.RowCount; i++) 
     { 
      for (int j = 0; j < dgvTest.ColumnCount; j++) 
      { 
       foreach (Information info in frmMain._dbList) 
       { 
        if (dgvTest.Rows[i].Cells[j].Value.ToString().ToLower() == info.InfoName.ToLower() && info.InfoInputType == "1") 
        { 
         DataGridViewComboBoxCell c = new DataGridViewComboBoxCell(); 
         c.Items.Add("0"); 
         c.Items.Add("1"); 
         dgvTest.Rows[i].Cells[(j + 1)] = c; 

        } 
       } 
      } 
     } 

問題:

Error Message

私は奇妙なことに、 "OK" をクリックしたら、それはコンボボックスを作成します。このプロセスを繰り返すと、最終的に各セルにComboBoxが設定されますが、マウスを重ねるたびに同じエラーメッセージがポップアップします。

セルをコンボボックスに設定してから、同じセルに戻そうとしていますか?

シンプルなソリューションを解決しよう - 値を設定する=#をc.Valueを追加する必要がありました。

答えて

0

コンボボックスの初期値を何かに設定する必要がありました。

c.Value = # 
0

上記の問題を回避します。 DataGridViewDataErrorイベントを追加できます。

はコードの下に試してみてください:上記

private void dgvTest_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 
    try 
    { 
     if (e.Exception.Message.contains("DataGridViewComboBoxCell value is not valid.")) 
     { 
      object value = dgvTest.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; 
      if (!((DataGridViewComboBoxColumn)dgvTest.Columns[e.ColumnIndex]).Items.Contains(value)) 
      { 
       ((DataGridViewComboBoxColumn)dgvTest.Columns[e.ColumnIndex]).Items.Add(value); 
      } 
     } 

     throw e.Exception; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(string.Format(@"Failed to bind ComboBox. " 
      + "Please contact support team with below error message:" 
      + "\n\n" + ex.Message)); 
    } 
} 

、ユーザーにエラーメッセージがスローされます。このエラーを抑制したい場合。次のコードに従ってください:

private void dgvTest_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 
    try 
    { 
     if (e.Exception.Message.contains("DataGridViewComboBoxCell value is not valid.")) 
     { 
      object value = dgvTest.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; 
      if (!((DataGridViewComboBoxColumn)dgvTest.Columns[e.ColumnIndex]).Items.Contains(value)) 
      { 
       ((DataGridViewComboBoxColumn)dgvTest.Columns[e.ColumnIndex]).Items.Add(value); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     //do nothing 
    } 
} 
+0

お返事ありがとうございました! ExceptionPolicyでエラーが発生していますか?これはVisual Studioの機能に組み込まれていますか、またはExceptionPolicyクラス内に含まれるHandleExceptionメソッドですか? – Yahtzee

+0

@Yahtzeeそれを必要としません。あなたはその例外を処理し、メッセージボックスを表示します。私は答えを変更しました。 –

+0

エラーメッセージがそれほど単純ではないため、例外がヒットしているとは思わない。私は自分の質問を編集し、エラーメッセージの画像をアップロードしました。 – Yahtzee

関連する問題