2016-09-27 83 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