2016-02-11 27 views
0

我是新來的c#和使用Windows窗體。我設置Datagridview只接受數字和一個小數點。如何防止從DataGridView c#存儲在數據庫中的小數點?

我存儲/更新Datagridview單元格值到SQL表(錢列類型)。 我不想將小數點本身存儲到sql表中,因爲sql不會接受它並會拋出異常(因爲只接受double值)

所以我寫了這段代碼來防止小數點被存儲到SQL表本身:

private void updateButton_Click(object sender, EventArgs e) 
    { 

    // connection string and the rest of sql stuff.... 

    MyCommand.CommandText = "UPDATE Table1 SET ........"); 
    MyCommand.Parameters.Add("@value1", SqlDbType.Money); 

if (Convert.ToChar(dataGridView1.Rows[0].Cells[1].Value) != '.')// if not dot then store it in database 
      { 
       MyCommand.Parameters["@value1"].Value = Convert.ToDecimal(dataGridView1.Rows[0].Cells[1].Value); 
      } 

} 

但是,此代碼沒有工作,仍然拋出一個異常(輸入字符串的不正確的格式),每當我被自己Row0, column1輸入小數點點,然後點擊更新按鈕。 任何人都可以告訴我爲什麼條件不起作用?我怎麼能使它工作。謝謝

+0

拋出什麼樣的異常? –

+0

@尼古拉斯舒斯特。 「輸入字符串的格式不正確」。任何想法? – Kate

+0

我懷疑Convert.ToDecimal在傳遞一個不能轉換爲數字的字符串時拋出異常。我懷疑dataGridView1.Rows [0] .Cells [1] .Value不包含您在輸入單元格時出現的值。 – Kevin

回答

1

這裏的問題似乎並不在於SQL命令,而是從string(在DataGridView)到double的轉換失敗(正如@Kevin提到的那樣)。

那麼它爲什麼會失敗呢?我們只能猜測,因爲我們現在還不知道細胞所具有的確切價值。很明顯,對'.'字符的檢查不起作用。無論如何,如果您使用其他語言(例如德語,使用','),這將會產生問題。

因此,我要建議三件事情:

第一:

打印出精確值到調試輸出(System.Diagnostics.Debug.WriteLine(dataGridView1.Rows[0].Cells[1].Value))看到你所得到的精確值,以及爲什麼。這只是一個學習目的,以瞭解代碼失敗的原因以及可能發生的其他不當行爲。

二:

使用Decimal.TryParse,而不是你的支票'.'

decimal cellValue; 
// Check if conversion possible 
if (Decimal.TryParse(dataGridView1.Rows[0].Cells[1].Value, out cellValue)) 
{ 
    MyCommand.Parameters["@value1"].Value = cellValue; 
} 
else 
{ 
    /*Whatever you want to do in a fail case*/ 
} 

這是更安全,因爲你總能察覺轉換的問題。

三:

更改列類型的DataGridView的:https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.valuetype%28v=vs.110%29.aspx 這應該避免很多對你的問題。

相關問題