Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将未绑定datagridview中的信息保存到SQL数据库_C#_Winforms_Datagridview - Fatal编程技术网

C# 如何将未绑定datagridview中的信息保存到SQL数据库

C# 如何将未绑定datagridview中的信息保存到SQL数据库,c#,winforms,datagridview,C#,Winforms,Datagridview,几个小时以来,我一直在尝试获取datagridview中的信息以保存到datatable中。datagridview从进行选择的组合框中填充。我搞不懂的是如何将订购数量转换为int。我相信一旦我有了它就会起作用 另外,是否可以使用datagridview的列名而不是单元格[] foreach (DataGridViewRow row in purchase_Order_ItemsDataGridView.Rows) { if (!row.IsNewRow)

几个小时以来,我一直在尝试获取datagridview中的信息以保存到datatable中。datagridview从进行选择的组合框中填充。我搞不懂的是如何将
订购数量
转换为
int
。我相信一旦我有了它就会起作用

另外,是否可以使用datagridview的列名而不是
单元格[]

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()));
编辑:此链接可能对您有更多帮助-

它处理转换单元格的方法,比上面的解决方案更健壮,当值为null时,将显著失败

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

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

是否有错误?你面临的确切问题是什么?@Alejandro;是的,我在将数据类型nvarchar转换为数字时遇到了
错误
当您创建
DataGridView
时,您应该为每个
DataGridViewColumn
指定正确轨道上的
ValueType
。我现在发现错误
输入字符串的格式不正确
。我是否应该在将其放入命令字符串之前解析。当某个值无法解析为指定的数据类型时,它会通知您。但是,您的错误是由单元格值引起的。如果您可以保证里面只有数字,那么在该列的某个地方必须有一个空单元格(也称为空值)。