循环获取数据网格视图的所有值

本文关键字:视图 网格 获取 数据 数据网 循环 | 更新日期: 2023-09-27 18:36:32

我正在尝试从由文本字段填充的数据网格视图中输入数据库中的记录,所以我使用 loop 逐个获取所有记录并保存它但现在的问题是我无法获取 Datagridview 行[num],它给我错误"索引必须不是空值或负值"。

 BSL.invoiceDetail idBSL = new BSL.invoiceDetail();
        //MessageBox.Show("proID from datagridview = " + (dataGridView1.Rows[1].Cells[1].Value).ToString());
        for (int i = 0; i <= dataGridView1.RowCount; i++)
        {
            idBSL.invoiceId = 1;
            idBSL.proId = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value);
            idBSL.quantity = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
            idBSL.unitPrice = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);
            idBSL.netProfit = Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value);

        }

循环获取数据网格视图的所有值

代码中的两个小更正。

  • DataGridView是基于0索引,因此循环退出条件应为 i < dataGridView1.RowCount
  • 循环不为每一行生成对象集合,它是一次又一次地更新同一实例 ( idBSL

您必须进行上述两个更正才能使代码正常工作。

或者,您也可以考虑/使用以下Linq方法。

var invoiceCollection = dataGridView1.AsEnumerable().Select((row, index) => new {
     invoiceId = index+1,
     proId = Convert.ToInt32(row.Cells[0].Value),
     quantity = Convert.ToInt32(row.Cells[2].Value),
     unitPrice = Convert.ToInt32(row.Cells[3].Value),
     netProfit = Convert.ToInt32(row.Cells[4].Value)
}).ToList()