如何将信息从未绑定的 datagridview 保存到 SQL 数据库
How do I save info from an unbound datagridview to SQL database
我已经尝试了几个小时来获取我的 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();
}
}
你试过吗?不可否认,这是一个权宜之计,但它确实将其转换为 int。
sqlCommand.Parameters.AddWithValue("@qty_Ordered", int.parse(row.Cells[2].Value.ToString()));
编辑:此 link 可能对您有更多帮助 -
Get Numeric Value from DataGridViewCell?
它处理的转换单元格的方法比上述解决方案更稳健,当您的值为 null 时会显着失败。
edit 2:看起来上面的解决方案不够稳健。下面的代码更健壮。
int qtyordered;
if (!int.TryParse(row.Cells[2].Value.ToString(), out qtyordered)
qtyordered = 0;
sqlCommand.Parameters.AddWithValue("@qty_Ordered", qtyordered);
Loathing 的答案效果最好,因为它可以透明地与您当前的代码一起使用,但是它有点棘手。需要暴露datatable的列,这样才能修改类型。您需要在创建列时/之后以及开始添加数据之前执行此操作。
purchase_Order_ItemsDataGridView.Columns[2].ValueType = typeof(int);
您需要尽早将它放在某处,在开始填充 table 之前但在创建列之后。
我已经尝试了几个小时来获取我的 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();
}
}
你试过吗?不可否认,这是一个权宜之计,但它确实将其转换为 int。
sqlCommand.Parameters.AddWithValue("@qty_Ordered", int.parse(row.Cells[2].Value.ToString()));
编辑:此 link 可能对您有更多帮助 - Get Numeric Value from DataGridViewCell?
它处理的转换单元格的方法比上述解决方案更稳健,当您的值为 null 时会显着失败。
edit 2:看起来上面的解决方案不够稳健。下面的代码更健壮。
int qtyordered;
if (!int.TryParse(row.Cells[2].Value.ToString(), out qtyordered)
qtyordered = 0;
sqlCommand.Parameters.AddWithValue("@qty_Ordered", qtyordered);
Loathing 的答案效果最好,因为它可以透明地与您当前的代码一起使用,但是它有点棘手。需要暴露datatable的列,这样才能修改类型。您需要在创建列时/之后以及开始添加数据之前执行此操作。
purchase_Order_ItemsDataGridView.Columns[2].ValueType = typeof(int);
您需要尽早将它放在某处,在开始填充 table 之前但在创建列之后。