.NET Microsoft Reporting在Windows 8.1中始终使用逗号格式化数字

.NET Microsoft Reporting在Windows 8.1中始终使用逗号格式化数字,.net,windows-8.1,comma,.net,Windows 8.1,Comma,我用.NET开发了一个使用Microsoft Reporting的应用程序。它在Windows XP、Vista、Windows 7和Windows 8上运行了5年,没有任何问题。由于Microsoft发布了Windows 8.1,问题是我报告中的所有数字都将使用逗号格式,而不是用户当前的区域设置 我尝试了很多方法来解决这个问题: 显式将rdlc报告模板中的Language属性设置为“de CH”-->此区域性使用“.”设置数字格式 在rdlc报告模板-->的表格单元格中使用“String.F

我用.NET开发了一个使用Microsoft Reporting的应用程序。它在Windows XP、Vista、Windows 7和Windows 8上运行了5年,没有任何问题。由于Microsoft发布了Windows 8.1,问题是我报告中的所有数字都将使用逗号格式,而不是用户当前的区域设置

我尝试了很多方法来解决这个问题:

  • 显式将rdlc报告模板中的Language属性设置为“de CH”-->此区域性使用“.”设置数字格式
  • 在rdlc报告模板-->的表格单元格中使用“String.Format(IFormatProvider,Value)”提供“de-CH”格式提供程序
  • 尝试了ReportViewer 10.0(Visual Studio 2010)和11.0(Visual Studio 2012)的不同版本的程序集
  • 将windows 8.1系统设置中的格式设置为“Deutsch(Schweiz)”,对应于“de CH”
有人也有同样的问题吗?Windows 8.1中是否有覆盖我的小数分隔符的设置?
如上所述:在Windows 8.0下运行时没有任何问题!

这就是解决方案:使用Microsoft的Locale Builder 2.0覆盖当前的“de CH”设置


是的,这是Windows 8.1中的一个已知问题:de CH区域设置的
NumberDecimalSeparator
错误

为了避免从Microsoft的Locale Builder向我的所有客户发送自定义数据,我通过明确设置
NumberDecimalSeparator
来解决这一问题:


不太优雅,但很管用。

检查CultureInfo中的de CH,我看到一个
的CurrencyDecimalSeparator
和一个
的NumberDecimalSeparator
的``(空格)。还有不同的组分隔符。也许你需要将其格式化为“Currency”而不是“Number”?
if (Thread.CurrentThread.CurrentCulture.Name == "de-CH")
{
    // fix Windows 8.1 de-CH locale 
    Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
}