0

直到昨天,下面的代码工作正常,但今天我收到一条错误消息 Argument out of exception & index out of range。

我在这里尝试做什么,从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) { }


}

在此处输入图像描述 在此处输入图像描述

4

5 回答 5

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) { }


} 

您正在自下而上地移动价值观,对吗?

于 2012-11-23T09:38:25.473 回答
1

如果e.RowIndex返回您0的第一行,那么您nextRowIndex将被设置-1为错误的。

你也lastRowIndex应该比行数少一。

int lastRowIndex = datagridview.Rows.Count - 1;

我看到您没有引用 上的行lastRowIndex,您可以将支票修改为:

if (nextRowIndex < lastRowIndex)
于 2012-11-23T09:37:20.810 回答
1

看起来您正在验证第 0 行中的单元格,因此nextRowIndex计算结果为-1,这显然不是有效的数组索引。

于 2012-11-23T09:38:51.060 回答
1

将您的if陈述更改为以下内容:

 if ((nextRowIndex < lastRowIndex) && (nextRowIndex >= -1))

-1如果您甚至想包含Rowheader.

如果您不想包含,请RowHeader替换-10.

希望这可以帮助。

于 2012-11-23T09:49:45.487 回答
0

当您的e.RowIndexis 0, nextRowIndexis-1并且您正在尝试访问时

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

抛出异常

于 2012-11-23T09:40:52.520 回答