错误消息“索引超出范围.必须是非负数且小于集合的大小.参数名称:索引”

本文关键字:索引 集合 小于 参数 消息 范围 是非 错误 | 更新日期: 2023-09-27 18:31:07

我有一个DataGridView .我想添加第 4 列值。我写了这段代码。但它在Total += Convert.ToDecimal(dgvSalesFooterAdd.Rows[i].Cells[4].Value);上显示了上述错误。

 decimal Total = 0;
 for (int i = 0; i < dgvSalesFooterAdd.Rows.Count; i++)
 {
      dgvSalesFooterAdd.Rows[i].Cells[4].Value = 
          Convert.ToDecimal(dgvSalesFooterAdd.Rows[i].Cells[3].Value) * 
          Convert.ToDecimal(dgvSalesFooterAdd.Rows[i].Cells[3].Value);
          Total += Convert.ToDecimal(dgvSalesFooterAdd.Rows[i].Cells[4].Value);
 }
 lblFinalTotalAdd.Text = Total.ToString();

创建第 5 列代码:

            OleDbConnection con = new OleDbConnection(conn);
            con.Open();
            DataTable dtusers = new DataTable();
            OleDbCommand cmd = new OleDbCommand("Select Shorts,Code,Description,Percentage from SalesFields", con);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            da.Fill(dtusers);
            dgvSalesFooterAdd.DataSource = dtusers;
            dgvSalesFooterAdd.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
            dgvSalesFooterAdd.Columns[0].Name = "Shorts";
            dgvSalesFooterAdd.Columns[1].Name = "Code";
            dgvSalesFooterAdd.Columns[2].Name = "Description";
            dgvSalesFooterAdd.Columns[3].Name = "Percentage";
            dgvSalesFooterAdd.Columns[0].HeaderText = "Shorts";
            dgvSalesFooterAdd.Columns[1].HeaderText = "Code";
            dgvSalesFooterAdd.Columns[2].HeaderText = "Description";
            dgvSalesFooterAdd.Columns[3].HeaderText = "Percentage";
            DataGridViewColumn amount = new DataGridViewColumn();
            amount.HeaderText = "Amount";
            amount.Name = "Amount";
            amount.CellTemplate = new DataGridViewTextBoxCell();
            dgvSalesFooterAdd.Columns.Insert(4, amount);
            con.Close();
            con.Close();

错误消息“索引超出范围.必须是非负数且小于集合的大小.参数名称:索引”

C# 的数组从零开始。这意味着第一个元素是元素 0。第 4 个元素是元素 3。

您可能只有四列,编号为 0 到 3。

试试这个,

 decimal Total = 0;
 for (int i = 0; i < dgvSalesFooterAdd.Rows.Count; i++)
 {
      dgvSalesBodyAdd.Rows[i].Cells[3].Value = 
          Convert.ToDecimal(dgvSalesBodyAdd.Rows[i].Cells[2].Value) * 
          Convert.ToDecimal(dgvSalesBodyAdd.Rows[i].Cells[2].Value);
          Total += Convert.ToDecimal(dgvSalesFooterAdd.Rows[i].Cells[3].Value);
 }
 lblFinalTotalAdd.Text = Total.ToString();