我正在尝试从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);
}
答案 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()