参数超出范围异常错误

时间:2012-11-23 09:35:54

标签: c# winforms datagridview

直到昨天,下面的代码工作正常,但今天我收到一条错误消息参数超出异常&指数超出范围。

我试图在这里做,从最后一行的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) { }


}

enter image description here enter image description here

5 个答案:

答案 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.RowIndex0时,nextRowIndex-1并且您正在尝试访问

datagridview.Rows[-1].Cells[2].Value = valuesForcell;

抛出异常