2016-09-27 81 views
2

我有一個使用DataTable作爲數據源的DataGridView。獲取字符串,如DataGridView所示

我需要(以字符串數組的形式)獲取具有相同格式的DataGridView中顯示的值。

因此,在DataTable中,DGV中顯示的值爲「100」的字段爲「€100,00」。我需要獲得「€100,00」作爲字符串

另一個字段是double,它的值是「31.506849315068493150684931507」,在DGV中顯示爲「31,51」。我需要得到「€31,51」作爲字符串

DataTable有不同類型的字段(字符串,日期,雙),我需要得到一個字符串,如DGV中所示。

我試着用下面的代碼,但我得到的值爲DataTable

For x As Integer = 0 To Me.DGV_IntCalc.RowCount - 1 
    Dim RowStrList As New List(Of String) 
    For Each Col As String In MaxColLen.Keys 
     RowStrList.Add(Me.DGV_IntCalc.Item(Col, x).Value.ToString) 
    Next 
    Calc_Summay &= String.Format(F_Str, RowStrList.ToArray) & vbCrLf 
Next 

F_Str是一個字符串,它賦予列像格式 「{0,10} {} 1.20」

EDIT2:

我也試過:

RowStrList.Add(Format(Me.DGV_IntCalc.Item(Col, x).Value, _ 
       Me.DGV_IntCalc.Columns(Col).DefaultCellStyle.Format)) 

但它沒有給出預期的結果。我還嘗試:

Dim Str$ = Me.DGV_IntCalc.Item(Col, x).Value.ToString 
Dim Frmt$ = Me.DGV_IntCalc.Columns(Col).DefaultCellStyle.Format 
Dim FormattedStr$ = Format(Str, Frmt) 

Dim FormattedStr$ = String.Format(Str, Frmt) 

但我得到的值作爲在DataTable(未格式化的)

+0

爲什麼不直接使用'.Value'而不是'.Value.toString'? – noidea

+0

您已將您的參數轉換爲您的編輯中的'String.Format'。 –

+0

@AndrewMorton我嘗試了'Format'和'String.Format'各自的語法,但我仍然收到錯誤。 – genespos

回答

2

的DGV提供包括格式化的數據的圖。你告訴它將某一列格式化爲貨幣。也許是這樣的:

dgv1.Columns(3).DefaultCellStyle.Format = "C2" 

爲了找回那些格式化的值,使用FormattedValue屬性:

For n As Int32 = 0 To dgv1.Rows.Count - 1 
    Console.WriteLine(dgv1.Item(n, 3).FormattedValue) 
Next 

還要注意的是,在你的代碼,你聲明If內部列表:

For x As Integer = 0 To Me.DGV_IntCalc.RowCount - 1 
    Dim RowStrList As New List(Of String) 
    For Each Col As String In MaxColLen.Keys 
     RowStrList.Add(Me.DGV_IntCalc.Item(Col, x).Value.ToString) 
    Next 
    Calc_Summay &= String.Format(F_Str, RowStrList.ToArray) & vbCrLf 
Next 

由於RowStrListIf塊內聲明,因此它只會在那裏存在。所有導致縮進的東西也會創建一個新的塊範圍。請參閱:Reference variables and objects elsewhere瞭解更多信息

+0

我已經聲明'RowStrList',因爲我需要它只在這裏。無論如何,我會檢查我的代碼,確保一切正常。謝謝 – genespos

+0

是的,如果你只是需要在塊中創建該字符串,那麼你很好 - 它不清楚它是否只是它的目的。 – Plutonix