【发布时间】:2015-03-13 08:50:30
【问题描述】:
我为此错误进行了很多搜索,许多相同的问题已经被问到,但它并没有解决我的问题。 我得到了
操作无效,因为它会导致对 SetCurrentCellAddressCore 函数的可重入调用。
场景是我有datagridview 和TextboxColumn 我正在使用CellBeginEdit 将其转换为ComboBoxColumn,在CellValidate 之后我再次将ComboBoxColumn 更改为TextboxColumn。这些代码适用于所有人。但是在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);
}
}
如何解决这个问题。
更新: 那里没有行,用户将添加新行并选择值,基本的事情是我想从数据库中显示组合和填充值,填充值取决于条件,所以每次都会出现新值,
样本数据
testTable
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
在 column1 中,我添加了一个值从 1 到 9 的组合,在 _mFillSieveSizeGridCombo 中,我将 id 传递给 sql server 2008 并使用 Combo.Item.Add(x) 方法填充组合。
【问题讨论】:
-
奇怪。我无法重现。有多少行?第 2 行中的值与其他值有什么不同吗?你能把它改成一个有效的吗?鼠标和F2会发生这种情况吗? (显然,我只是在猜测,-) mFillSieveSizeGridCombo 中的单元格 c 由于其行号而发生了什么特殊情况?
-
@taw no row 那里用户将添加新行并选择值,基本的事情是我想从数据库中显示组合和填充值,填充值取决于条件,所以每次新值会来的,
-
如果您评论
_mFillSieveSizeGridCombo,则单元格的项目不会被填满。但是错误仍然发生吗? -
另外:DGV 或其数据源/绑定上是否有任何过滤器?
-
@taw DGV 没有绑定,很简单,我通过 rows.add 添加行,并且没有过滤器
标签: c# datagridview datagridviewcomboboxcell datagridviewtextboxcell