簡體   English   中英

參數超出范圍異常錯誤

[英]Argument Out of range exception Error

直到昨天,下面的代碼仍然可以正常工作,但是今天,我收到一條錯誤消息,參數超出異常,索引超出范圍。

我要在這里嘗試從最后一行的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) { }


}

在此處輸入圖片說明在此處輸入圖片說明

如果我理解得不錯,您應該具有:

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


} 

您是自下而上地移動價值觀嗎?

如果e.RowIndex返回第一e.RowIndex 0 ,則您的nextRowIndex將設置為-1 ,這是錯誤的。

並且您的lastRowIndex應該比行數少一個。

int lastRowIndex = datagridview.Rows.Count - 1;

我發現您沒有引用lastRowIndex上的行,可以將檢查修改為:

if (nextRowIndex < lastRowIndex)

似乎您正在驗證第0行中的單元格,因此nextRowIndex計算結果為-1 ,這顯然不是有效的數組索引。

將您的if語句更改為以下內容:

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

如果要包括Rowheader-1是有效的rowIndex。

如果您不想包括RowHeader則將-1替換為0

希望這可以幫助。

當您的e.RowIndex0nextRowIndex-1並且您正在嘗試訪問

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

引發異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM