直到昨天,下面的代码工作正常,但今天我收到一条错误消息参数超出异常&指数超出范围。
我试图在这里做,从最后一行的index 3(4th col)
获取该单元格值&加入col 3 (index 2) cell
。当我在最后一个单元格中输入它时(从下到上),我收到上述错误消息。
请帮帮我。
private void datagridview_CellValidated(object sender, CellValidatedEventArgs e)
{
if (e.ColumnIndex != 3)
return;
int nextRowIndex = e.RowIndex -1;
int lastRowIndex = datagridview.Rows.Count;
try
{
if (nextRowIndex <= lastRowIndex)
{
var valuesForcell = datagridview.Rows[e.RowIndex].Cells[3].Value.ToString();
datagridview.Rows[nextRowIndex].Cells[2].Value = valuesForcell;
datagridview.Rows[nextRowIndex].Cells[2].ReadOnly = true;
datagridview.Rows[nextRowIndex].Cells[2].Style.ForeColor = Color.MediumVioletRed;
datagridview.ClearSelection();
datagridview.SelectionMode = GridViewSelectionMode.CellSelect;
datagridview.Rows[nextRowIndex].Cells[3].BeginEdit();
}
}
catch (Exception exception) { }
}
答案 0 :(得分:2)
如果我理解你应该有:
private void datagridview_CellValidated(object sender, CellValidatedEventArgs e)
{
if (e.ColumnIndex != 3)
return;
int nextRowIndex = e.RowIndex -1;
try
{
if (nextRowIndex >=0 )
{
var valuesForcell = datagridview.Rows[e.RowIndex].Cells[3].Value.ToString();
datagridview.Rows[nextRowIndex].Cells[2].Value = valuesForcell;
datagridview.Rows[nextRowIndex].Cells[2].ReadOnly = true;
datagridview.Rows[nextRowIndex].Cells[2].Style.ForeColor = Color.MediumVioletRed;
datagridview.ClearSelection();
datagridview.SelectionMode = GridViewSelectionMode.CellSelect;
datagridview.Rows[nextRowIndex].Cells[3].BeginEdit();
}
}
catch (Exception exception) { }
}
你正在自下而上移动价值吗?
答案 1 :(得分:1)
如果e.RowIndex
在第一行返回0
,那么您的nextRowIndex
将设置为-1
,这是错误的。
您的lastRowIndex
也应该比行数少一个。
int lastRowIndex = datagridview.Rows.Count - 1;
我发现您没有引用lastRowIndex
上的行,您可以将支票修改为:
if (nextRowIndex < lastRowIndex)
答案 2 :(得分:1)
看起来您正在验证第0行中的单元格,因此nextRowIndex
的计算结果为-1
,这显然不是有效的数组索引。
答案 3 :(得分:1)
将您的if
声明更改为以下内容:
if ((nextRowIndex < lastRowIndex) && (nextRowIndex >= -1))
如果您想要包含-1
, Rowheader
是有效的rowIndex。
如果您不想加入RowHeader
,请将-1
替换为0
。
希望这有帮助。
答案 4 :(得分:0)
当您的e.RowIndex
为0
时,nextRowIndex
为-1
并且您正在尝试访问
datagridview.Rows[-1].Cells[2].Value = valuesForcell;
抛出异常