2016-07-06 22 views
1

我知道我能做到這一點:語法提取的DataGridViewCell值,無需轉換

Dim Amount As Double = CDbl(DGVRow.Cells("Amount").Value) 

但我DGV細胞已經是Double所以我會得到他的價值,無需轉換。

我嘗試了下面的代碼(但它是不正確的語法)

Dim Amount As Double = DGVRow.Cells.OfType(Of Double)("Amount").Value 
+0

由於列/單元格需要能夠包含任何內容,因此它會返回「對象」,這意味着您的值被裝箱。如果你有一個數據源,你*可以*做很多你問的問題:Dim d = dt.Rows(n).Field(Of Double)(「Amount」)'。還有一種轉換,只是一種不同的類型。儘管 – Plutonix

+0

@Plutonix號碼對於金額類型值來說十進制是更好的選擇。在這種情況下,我沒有將數據集設置爲源。我選擇'雙',因爲我必須做計算,使用'雙',我不需要極端的精度。無論如何感謝您寶貴的提示;) – genespos

+0

*特別是*如果它是金錢*和*有計算,'十進制'是一個更好的選擇。它可以防止舍入錯誤 - 請參閱http://stackoverflow.com/q/1165761和http://stackoverflow.com/q/890100 – Plutonix

回答

1

如果您知道它將始終包含Double,那麼您將烏爾德使用DirectCast

Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double) 

這些都產生結果類型的變量雙

Dim value As Object 
value = 1.23# 
Dim resultDC = DirectCast(value, Double) 
Dim resultCT = CType(value, Double) 
Dim resultCDBL = CDbl(value) 

但也有不同的東西去幕後。 DirectCast是最直接的。

查看該帖子Difference between DirectCast() and CType() in VB.NET詳細介紹了VB.net中轉換方法的區別。也是這一個VB CStr, CDate, CBool, etc. vs. DirectCast for casting without conversion

基本上,當您知道您的Object包含您期望的類型時,首選DirectCast,因此不需要轉換。它會比其他選項更快。

1

如果您確信細胞含有Double類型的值,然後利用DirectCast

Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double) 

其他方式將直接與有界數據源的值一起工作,如@Plutonix在註釋中所述