-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 行从元素 0 而不是元素 1 开始,因此当尝试访问第 6 个元素时,您需要访问 DGV.Rows[5] 而不是 DGV.Rows[6] 而 DataGridViews.Rows.Count 返回从1 而不是 0。

编辑:

向评论者澄清

datagridview rows 数组从元素 0 开始,因此 datagridview1.Rows[0] 给出了 DGV (DataGridView) 的第一行。

在提供的代码中,海报循环直到 DGV.ROWS.COUNT 将返回基于非零的计数。我的意思是如果有 6 行,则 count 返回 6 但 DGV.ROWS 数组中的最后一行由 DGV.Rows[5] 访问,因为 ROWS 数组是从零开始的(从 0 开始)所以 Rows[0]是第一行,Rows[1] 第二行等...希望这可以为人们解决问题

于 2013-03-20T12:01:13.763 回答