【发布时间】:2015-01-09 13:21:40
【问题描述】:
我使用 Windows 数据网格视图从 SQL 中的订单项表中访问数据。
我在 SQL 中将商品的价格存储为十进制(18,4)
在datagridview上我原来在decimal(18,4)上使用了C4的格式字符串
这很好,但是如果价格只是 18.12 英镑,它会在价格上显示额外的零,它会显示为 18.1200 英镑,但如果价格是 18.1234 英镑,那么我想看到 18.1234 英镑。一个重要的注意事项是,我希望 £ 符号是特定于文化的。因为我住在英国,所以它的英镑,如果美国用户使用该系统,它需要是 $ 等等
我解决这个问题的方法是像这样处理 datagridview 上的单元格格式化事件
Private Sub gridOrderItems_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles gridOrderItems.CellFormatting
If Me.gridOrderItems.Rows.Count > 0 Then
Dim dr As DataGridViewRow = Me.gridOrderItems.Rows(e.RowIndex)
If e.ColumnIndex = Me.gridOrderItems.Columns("priceColumn").Index Then
e.Value = USEFUL.RemoveTrailingZerosForCurrency(e.Value)
End If
End If
End Sub
Public Shared Function RemoveTrailingZerosForCurrency(ByVal d As Decimal) As String
Dim s As String = Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol
Return d.ToString(s & "0.00###########################")
End Function
虽然我已经开始遇到绘制大型数据网格的性能问题。我正忙于阅读 Microsoft 最佳实践。
我正在尝试查看是否有标准的方法来执行此操作,可能只是一个标准的 DataGridViewCellStyle 格式字符串。我打算创建一个变量来保存单元格样式并对其应用格式。
我可以使用“0.00##########################”,但这不包括像£这样的文化特定货币符号, $等
我希望我已经解释了自己。
快速概览
如果价格是 18.1234 英镑,我想看 18.1234 英镑 如果价格是 18.1230 英镑,我希望看到 18.1230 英镑的原样。 如果价格是 18.1200 英镑,我想看 18.12 英镑 如果价格是 18.0000 英镑,我希望看到 18.00 英镑
最重要的是,我希望文化符号是特定于文化的。
我正在考虑将 SQL 数据类型更改为“金钱”,但如果它无法将小数 (18,4) 与我们报告系统上的金钱结合起来,我可能会陷入一大堆 SQL Cast 噩梦。
任何想法或建议都会有所帮助,在此先感谢。
大卫。
【问题讨论】:
-
你试过
d.ToString("C4", New System.Globalization.CultureInfo("en-GB"))吗? -
我试试,看代码担心18.0000还是18.0000
标签: .net sql-server vb.net datagridview formatting