如何将信息从未绑定的数据网格视图保存到SQL数据库

时间:2015-01-01 23:39:35

标签: c# winforms datagridview

我已经花了好几个小时来获取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();
        }
    }

1 个答案:

答案 0 :(得分:2)

你试过这个吗?不可否认,这是一种权宜之计解决方案,但确实将其转换为int。

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);

在开始填充表格之前,但是在创建列之后,您需要尽早将其放在某处。