【问题标题】:Set Culture Invariant for whole application(thread) Point '.' instead of ','为整个应用程序(线程)点设置文化不变量“。”代替 ','
【发布时间】:2014-01-31 12:06:58
【问题描述】:

我有这个应用程序,它要求用户介绍一些价格等。使用 dataGridViews 也可以显示。问题是在某些计算机上 '.' 这被视为 ',' 我设法获得一些 TextBox 离开事件并为其设置不变文化但是因为我使用 dataGridViews 来显示和 ReportViewer 我也有一个将数字转换为文本的代码和这个问题我的应用程序在这个文化问题的当前状态下毫无价值,所以我需要将所有内容设置为不变文化,无论它采用什么值例如:

2.00 as 200,00 在那台计算机上我想使用不变的文化,无论是什么都显示2.00 使用'.' 而不是','

【问题讨论】:

  • 您不会将所有内容都设置为不变的文化,而是设置不变的文化,然后在相关的地方使用它。当您应该在应用程序中设置一个不变量并在执行此操作时使用它时,您将在某个地方往返字符串并假设文化。如果您有 FxCop,您可以启用全球化规则,它会为您跟踪所有有问题的代码。 Parse、TryParse、Convert、ToString 和 String.Format 是常见的嫌疑犯。
  • 正如我所说,我还需要在 dataGridView 中使用来显示“。”而不是','
  • 不是关于你需要什么,它,关于用户需要什么,他们需要在他们的文化中输入和查看数据,而不是你的,因为你正在努力正确地编写软件。
  • 这可能有点苛刻。关于 .net 中的全球化和本地化的问题是,一旦您开始始终如一地使用它,它就会起作用。如果你试图弯曲它或走捷径,你最终会一团糟。

标签: c# datagridview formatting numbers


【解决方案1】:

我不建议将应用程序强制应用于文化不变量或特定文化。但这就是您想要的...检查this SO问题的答案。

如果您只想更改 datagridview,请更改 DefaultCellStyle.FormatProvider 以使用您所在国家/地区的文化。在下面的示例中,我将 FormatProvider 更改为使用英美文化。

Column.DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("en-US")

【讨论】:

  • 对于这个特定的应用程序,我只需要这种不变的文化,它只会在我的国家使用,如果我不这样做,整个应用程序就没用了
  • @user3144640 - 在用户文档或发行说明中添加一个条目,要求用户切换您所在国家/地区的文化。由您决定..答案中给出的链接可能会有所帮助。
  • 至少告诉我如何让 dataGridView 使用 '.'而不是“,”来识别改变文化或任何这可以回答我的问题我有 2 列显示小数所以 foreach(DataGridViewRow row in dataGridView1.Rows){ }
  • 谢谢,把这个放到加载事件中?
  • @user3144640 - 如果您已通过代码定义列,请将其添加到 InitializeComponent 方法中,或者如果您已将网格绑定到数据库,请在 DataBindingComplete 事件处理程序中执行此操作。如果可行,请接受答案并投票;)
【解决方案2】:

您可以先尝试以下操作:

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator = ".";

但是,我建议区分用户交互并让它在默认文化中发生。

【讨论】:

  • 对于这个特定的应用程序,我只需要这种不变的文化,它只会在我的国家使用,如果我不这样做,整个应用程序就没用了
  • 您说自己在某些计算机上。您的应用程序在具有不同语言设置的 PC 上运行。使它们相似 = 解决问题,-或- 制作一个适当的应用程序,我(作为用户)可以使用我的数字键盘输入小数点。
  • 如何使它们相似我无权访问用户应用程序,我想强制这个我不想给选项
猜你喜欢
  • 2019-01-07
  • 2012-11-01
  • 1970-01-01
  • 2016-10-08
  • 2014-08-02
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多