2015-01-01 50 views
-1

我一直在嘗試了幾個小時讓我的datagridview的信息保存到數據表。 datagridview從進行選擇的組合框中填充。我無法弄清楚如何將qty_Ordered轉換爲int。我相信一旦我擁有了它,它就會起作用。我如何從一個未綁定的DataGridView保存信息到SQL數據庫

此外,是否有可能使用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

你有錯誤嗎?你面臨的確切問題是什麼? – Alejandro

+0

@Alejandro;是的,我得到了'將數據類型nvarchar轉換爲數字時出錯' –

+0

當你創建你的'DataGridView'時,你應該爲每個'DataGridViewColumn'指定'ValueType'。 – Loathing

回答

2

您試過這個嗎?誠然,這是一個權宜之計,但它確實將其轉換爲int。

sqlCommand.Parameters.AddWithValue("@qty_Ordered", int.parse(row.Cells[2].Value.ToString())); 

編輯:此鏈接可以幫助你更多 - Get Numeric Value from DataGridViewCell?

它用各種方法對細胞轉化與除了上述解決方案的更多一點的魯棒性交易,將將大大當你的價值是零失敗。

編輯2:看起來像上述溶液是不足夠穩健。下面的代碼更強大。

int qtyordered; 

if (!int.TryParse(row.Cells[2].Value.ToString(), out qtyordered) 
    qtyordered = 0; 

sqlCommand.Parameters.AddWithValue("@qty_Ordered", qtyordered); 

Loathing的答案會工作得最好,因爲它可以透明地處理當前的代碼,但這有點棘手。您需要公開數據表的列,以便修改類型。你需要在列創建之後或開始添加數據之前/之後這樣做。

purchase_Order_ItemsDataGridView.Columns[2].ValueType = typeof(int); 

在開始填充表格之前,您需要將它放在某個位置,但在創建列之後。

+0

這是在正確的軌道上。我現在得到錯誤'輸入字符串的格式不正確。在將它放入命令字符串之前,我應該「解析」嗎? –

+1

如果你想在把它放入命令字符串之前解析,那麼我絕對推薦使用TryParse而不是解析。它會告訴你何時一個值不能被解析爲指定的數據類型。但是,您的錯誤是由於單元格的價值。如果你可以保證裏面只有數字,那麼你必須在某個地方有一個空單元格(又稱空值)。 – MingShun

相關問題