私はこのエラーをたくさん検索しましたが、同じ質問がすでに多く寄せられていますが、問題は解決していません。私は得ています
SetCurrentCellAddressCore 関数への再入可能呼び出しになるため、操作は無効です。
シナリオはdatagridview
、TextboxColumn
私が使用CellBeginEdit
して変換し、 ComboBoxColumn を TextboxColumn に再度変更しComboBoxColumn
た後です。CellValidate
コードはすべての人に有効です。しかし、正確な行で上記のエラーを取得するとe.RowIndex = 2
、この例外がスローされますが、他の行にはエラーが表示されません。このエラーを省略して続行すると、e.RowIndex = 2 セルの値が空白になり、他の行の値が機能します。
これがのコードですCellBeginEdit
if (e.ColumnIndex == 2 && e.RowIndex >= 0)
{
try
{
string s = Convert.ToString(_dgvCoarseAggegateTest[e.ColumnIndex, e.RowIndex].Value);
string s1 = Convert.ToString(_dgvCoarseAggegateTest[e.ColumnIndex, 0].Value);
DataGridViewComboBoxCell c = new DataGridViewComboBoxCell();
string _SizeName = _cGetParrent._mGetParentCellValue(ref _dgvCoarseAggegateTest, e.RowIndex, 1);
_mFillSieveSizeGridCombo(_mGetMetalSizeID(_SizeName), ref c); // Here My Combo Will GetValues from SQL and it Returning Value
_dgvCoarseAggegateTest[e.ColumnIndex, e.RowIndex] = c; // Heres the error When e.RowIndex == 2 and if e.RowIndex != 2 then no error
_dgvCoarseAggegateTest[e.ColumnIndex, e.RowIndex].Value = s;
_dgvCoarseAggegateTest[e.ColumnIndex, 0].Value = s1;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
これを解決する方法。
UPDATE: ユーザーが新しい行を追加して値を選択する行はありません。基本的には、データベースからコンボと塗りつぶし値を表示したいのですが、塗りつぶし値は条件に依存するため、新しい値が来るたびに、
サンプルデータ
testTable
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
column1 に 1 から 9 までの値を持つコンボを 1 つ追加しました。ID を_mFillSieveSizeGridCombo
SQL Server 2008 に渡し、Combo.Item.Add(x)
メソッドを使用してコンボを埋めています。