在循环中获取datagridview的所有值

时间:2016-02-28 13:18:54

标签: c# visual-studio-2012 datagridview

我正在尝试从textfields填充的datagridview输入数据库中的记录,所以我使用循环逐个获取所有记录并保存但现在问题是我无法获取datagridview row [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);


        }

1 个答案:

答案 0 :(得分:0)

代码中的两个小修正。

  • 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()