我有一个使用 DataTable 作为数据源的 DataGridView。
我需要获取(作为字符串数组)DataGridView 中显示的具有相同格式的值。
因此,在数据表中,有一个值为“100”的字段,在 DGV 中显示为“€ 100,00”。我需要将“€ 100,00”作为字符串
另一个字段是 double 值,其值为“31.506849315068493150684931507”,在 DGV 中显示为“€ 31,51”。我需要将“€ 31,51”作为字符串
DataTable
具有各种类型的字段(字符串、日期、 double ),对于所有这些字段,我需要获取 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}”的列格式
编辑2:
我也尝试过:
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
中的值(未格式化)
最佳答案
DGV 提供包含格式的数据 View 。在某个地方你告诉它将该一列格式化为货币。也许是这样的:
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
block 内声明的,因此它只会存在于此处。所有导致缩进的内容也会创建一个新的 block 作用域。请参阅:Reference variables and objects elsewhere了解更多信息
关于.net - 获取 DataGridView 中所示的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39720571/