2015-06-12 63 views
1

現狀:驗證貨幣允許多於兩位小數

我正在寫使用C#在VS2013與.NET4.0 WinForms應用程序。

datagridview中的某些單元格需要驗證爲正確格式的英國貨幣值。 dgv單元格格式設置爲帶有兩位小數的貨幣。爲了驗證我使用下面的代碼:

decimal convertedCurrency; 

if (decimal.TryParse(dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString(), NumberStyles.Currency, null, out convertedCurrency)) 
{ 
    if (convertedCurrency > columnDetails.MaxValue || convertedCurrency < 0) 
    { 
     this.ReportError(dataGrid, e, dataGrid.Columns[e.ColumnIndex].HeaderText + " must be between £0 and £" + columnDetails.MaxValue); 
    } 
} 
else 
{ 
    this.ReportError(dataGrid, e, "Incorrect format for a money value"); 
} 

問題:

這工作prefectly除非用戶輸入例如多於兩位小數的值100.001。這被認爲是有效的,並且這個值被寫入數據庫。

問:

我怎樣才能最好的驗證,使得具有兩個以上的小數位用戶輸入捕獲和處理?我當然可以進入一些混亂的字符串處理,但有沒有更優雅的方式,理想情況下繼續使用TryParse?

+1

見http://stackoverflow.com/questions/13477689/find-number-of-decimal-places-in-decimal-value-regardless-of-culture找到小數位的數量。只需確認它是<= 2。 –

+0

真的很有用@JaredMoore。如果這是在回答而不是評論中,我會鼓勵你。 – ifinlay

+0

乾杯,轉換爲答案。 –

回答

1

三種可能的解決辦法,我建議:

1)使用MaskedTextBox中避免該問題從一開始就

2)創建一個keyup事件解析/檢查輸入了正確的格式

3)使用正則表達式輸入:^ [0-9] 。[0-9] {2} $或^ [0-9]。[0-9] [0-9] $