0

昨日まで、以下のコードは正常に機能していましたが、今日はエラーメッセージ「引数が例外外でインデックスが範囲外です」が表示されます。

ここでやろうとしているの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返す場合は、どちらが間違っているかに設定されます。0nextRowIndex-1

またlastRowIndex、行数より1つ少なくする必要があります。

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を含めたい場合は、有効なrowIndexですRowheader

含めたくない場合はRowHeader、に置き換え-10ください。

お役に立てれば。

于 2012-11-23T09:49:45.487 に答える
0

あなたe.RowIndex0nextRowIndexであり-1、あなたがアクセスしようとしているとき

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

例外をスローします

于 2012-11-23T09:40:52.520 に答える