我使用windows datagridview从SQL中的订单商品表访问数据。
我在SQL中将项目的价格存储为十进制(18,4)
在datagridview上,我最初在十进制(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
我开始遇到绘制大型数据网格的性能问题。我正忙着阅读微软的最佳实践。
我试图看看是否有一种标准的方法,可能只是一个标准的DataGridViewCellStyle格式字符串。我打算创建一个变量来保存单元格样式并对其应用格式。
我可以使用“0.00 ###########################”但这不包括像£这样的文化特定的Money符号, $ etc
我希望我已经解释过了。
如果价格是18.1234英镑,我希望看到18.1234英镑 如果价格是18.1230英镑,我希望看到18.1230英镑。 如果价格是18.1200英镑,我希望看到18.12英镑 如果价格是18.0000英镑,我希望看到18.00英镑
最重要的是,我希望文化符号具有文化特色。
我正在考虑将SQL数据类型更改为“money”,但如果它无法将十进制(18,4)与我们的报告系统中的钱联合起来,我可能会陷入一堆SQL Cast恶梦。
任何想法或建议都会有所帮助,在此先感谢。
大卫。
答案 0 :(得分:0)
你可以尝试:
Public Shared Function RemoveTrailingZerosForCurrency(ByVal d As Decimal) As String
Return d.ToString("C4").Replace("00", "")
End Function
如果您未指定文化,ToString
将使用CurrentCulture
。
答案 1 :(得分:0)
我最终在表单中创建了默认的单元格样式变量,并将样式分配给需要相同类型的多个列。我相信这应该可以提高性能。
在表单顶部声明符号以便于使用
Private symbol As String = Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol
然后尽早调用它,你可以在表单加载中进行调用,但是我会调查是否有更早的,更好的时间才能实际绘制网格。
blackDefaultCellStyle = New DataGridViewCellStyle
blackDefaultCellStyle = Me.gridOrderItems.DefaultCellStyle.Clone()
blackDefaultCellStyle.Format = symbol & "0.00###########################"
现在我只需将列分配给单元格样式,如下所示:
Me.gridOrderItems.Columns("DailypriceDataGridViewTextBoxColumn").DefaultCellStyle = blackDefaultCellStyle