指数超出范围.必须非负且小于集合的大小.参数名称:index (DECIMAL)

本文关键字:参数 DECIMAL index 集合 范围 小于 指数 | 更新日期: 2023-09-27 18:04:56

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>

指数超出范围.必须非负且小于集合的大小.参数名称:index (DECIMAL)

你确定dgvGetID包含item吗?

DataGridViews行从元素0开始,而不是元素1,因此当试图访问第6个元素时,您需要访问DGV。行[5]不DGV。DataGridViews.Rows.Count返回从1开始而不是0的行数

编辑:

澄清评论

datagridview行数组从元素0开始,所以datagridview1。Rows[0]给出DGV (DataGridView)的第一行。

在所提供的代码中,海报循环直到DGV.ROWS.COUNT,它将返回基于非零的计数。我的意思是,如果有6行,那么计数返回6,但在DGV的最后一行。ROWS数组由DGV访问。行[5],因为Rows数组是从零开始(从0开始),所以行[0]是第一行,行[1]第二行等…希望大家明白了