如何将信息从未绑定的 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 之前但在创建列之后。