-1
SalesOrderEntry rey = new SalesOrderEntry(id, cash);
total = Convert.ToInt32(lblCustomersCash.Text) - Convert.ToInt32(lblSubtotal.Text);

if (total > cash)
{
    DGVTOTAL.DataSource = ProductREPO.GETORDERTOTALLIST();

    for (int i = 0; i < DGVORDER.Rows.Count; ++i)
    {
        SalesOrderEntry see = new SalesOrderEntry(id, cash);
        //CASH = 649 and im selecting an item that is equivalent to 30

        sum2 = Convert.ToInt32(DGVORDER.Rows[i].Cells["OrderedProductPrice"].Value);

        dgvGetID.DataSource = SalesORDERREPO.weredone(id);
        decimal newcash = int.Parse(dgvGetID.Rows[0].Cells["Cash"].Value.ToString());
        MessageBox.Show("NEW BALANCE CASH: " + newcash);
    }
}
else
{
    MessageBox.Show("Hey your Cash is not ENOUGH to Buy this ITEM");
}

新しい現金残高を表示したい..小計に演繹的..しかし、このエラーが発生しています:

<Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index>

4

2 に答える 2

2

dgvGetID に項目が含まれていることは確かですか?

于 2013-03-20T11:58:44.327 に答える
0

DataGridViews の行は要素 1 ではなく要素 0 から始まるため、6 番目の要素にアクセスしようとすると、DGV.Rows[6] ではなく DGV.Rows[5] にアクセスする必要がありますが、DataGridViews.Rows.Count は次の行から始まる行数を返します。 0 ではなく 1 です。

編集:

コメンターに明確にするために

datagridview の行配列は要素 0 から始まるため、datagridview1.Rows[0] は DGV (DataGridView) の最初の行を示します。

提供されたコードでは、ポスターはゼロ以外のカウントを返す DGV.ROWS.COUNT までループします。つまり、6 行ある場合、count は 6 を返しますが、ROWS 配列はゼロベース (0 から始まる) であるため、DGV.ROWS 配列の最後の行は DGV.Rows[5] によってアクセスされるため、Rows[0]は最初の行、Rows[1] は 2 番目の行などです。

于 2013-03-20T12:01:13.763 に答える