0

何が起こっているのか正確にはわかりません。セルが入力されたときに、列のセル タイプをコンボ ボックスに変更しようとしています。RowIndex と ColumnIndex が同じ場合を除き、すべての行で正常に機能します。その行/列を選択すると、「SetCurrentCellAddressCore 関数への再入可能な呼び出しが発生するため、操作は無効です。

dgv1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  if(e.ColumnIndex == dgv1.Columns["ColumnName"].Index)
  {
    DataGridViewComboBoxCell cmbCell = new DataGridViewComboBoxCell();

    foreach(string v in values)
    {
      cmbCell.Items.Add(v);
    }

    dgv1.Rows[e.RowIndex].Cells["UnitEchelon"] = cmbCell;
   }
}
4

1 に答える 1

1

RowIndex私はあなたのコードをテストしましたが、あなたが報告しているエラーはequalsの場合には表示されませんがColumnIndex、指定されたセルが既にDataGridViewComboBoxCellタイプの場合に表示されます。したがって、このエラーは次の方法で簡単に回避できます。

if (dgv1.Rows[e.RowIndex].Cells["UnitEchelon"].GetType() != typeof(DataGridViewComboBoxCell))
{
    dgv1.Rows[e.RowIndex].Cells["UnitEchelon"] = cmbCell;
}

特定のタイプ (コンボボックス、テキストなど) はセル レベルで設定されますが、最初のタイプは列レベル (列が挿入されるとき) で作成されることに注意してください。あなたが行っていることは、100% 正しくない/期待できると見なされる可能性があります。列内のすべてのセルは同じ型であると見なされます。この目的でプロパティ (例: EditType) に依存してセルの型を変更するのではなく、ターゲット型の変数に代入するだけです。この最後のコメントは、非常に柔軟性のない動作を何らかの形で説明することです (エラーをトリガーせずに前後に変更を実行しない理由)。

于 2013-10-01T16:25:24.067 に答える