我已经花了好几个小时来获取datagridview中的信息以保存到数据表中。 datagridview由组合框填充,在组合框中进行选择。我无法弄清楚如何将qty_Ordered
转换为int
。我相信一旦拥有它,它就会起作用。
此外,是否可以使用datagridview的列名而不是Cells[]
?
foreach (DataGridViewRow row in purchase_Order_ItemsDataGridView.Rows)
{
if (!row.IsNewRow)
{
SQL = @"INSERT INTO Purchase_Order_Items (Purchase_Order_ID, Part_Number, Qty_Ordered, Work_Order_Number)
VALUES(@purchase_Order_Id, @part_Number, @qty_Ordered, @work_Order_Number)";
sqlCommand = new SqlCommand(SQL, DataAccessClass.sql_Connection);
sqlCommand.Parameters.AddWithValue("@purchase_Order_ID", purchase_Order_Id);
sqlCommand.Parameters.AddWithValue("@part_Number", row.Cells[1].Value);
sqlCommand.Parameters.AddWithValue("@qty_Ordered", row.Cells[2].Value);
sqlCommand.Parameters.AddWithValue("@work_Order_Number", row.Cells[3].Value);
sqlCommand.ExecuteNonQuery();
}
}
答案 0 :(得分:2)
sqlCommand.Parameters.AddWithValue("@qty_Ordered", int.parse(row.Cells[2].Value.ToString()));
编辑:此链接可能会对您有所帮助 - Get Numeric Value from DataGridViewCell?
它处理转换单元格的方法比上面的解决方案更具鲁棒性,当你的值为null时,它会显着失败。
编辑2:看起来上述解决方案不够健壮。以下代码更加健壮。
int qtyordered;
if (!int.TryParse(row.Cells[2].Value.ToString(), out qtyordered)
qtyordered = 0;
sqlCommand.Parameters.AddWithValue("@qty_Ordered", qtyordered);
厌恶的答案会起到最好的作用,因为它对你当前的代码透明地工作,但是它有点棘手。您需要公开数据表的列,以便您可以修改类型。您需要在创建列之后/之后以及开始添加数据之前执行此操作。
purchase_Order_ItemsDataGridView.Columns[2].ValueType = typeof(int);
在开始填充表格之前,但是在创建列之后,您需要尽早将其放在某处。