我有一个使用DataTable作为数据源的DataGridView。
我需要得到(作为字符串数组)DataGridView中显示的具有相同格式的值。
因此,在DataTable中有一个值为" 100"的字段。在DGV中显示为"€100,00"。我需要得到"€100,00"作为字符串
另一个字段是双字节,其值为" 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 :(得分: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
由于在RowStrList
块内声明If
,因此它只存在于那里。导致缩进的所有内容也会创建一个新的块范围。有关详细信息,请参阅:Reference variables and objects elsewhere