循环获取数据网格视图的所有值
本文关键字:视图 网格 获取 数据 数据网 循环 | 更新日期: 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()