DataGridView 未显示正确的文化信息

DataGridView not showing correct cultureinfo

我有一个相当标准的 BindingSource / DataGridView 组合。 bindingSource 的小数类型 属性 必须作为货币显示在 DataGridView 中。对于测试,我想看看如果我使用使用 作为货币格式而不是 £[=14= 的文化信息会是什么样子]

我的问题是,尽管我以编程方式更改了当前线程的 CurrentUICulture(我的应用程序只有一个线程),但我的 DataGridView 仍然显示 £

设计师为我创建了以下代码片段:

this.columnPriceValue = new Forms.DataGridViewTextBoxColumn();
this.columnPriceValue.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
this.columnPriceValue.DataPropertyName = "Value";
dataGridViewCellStyle2.Format = "C4";
...

在我的主窗体的构造函数中,我根据 Whosebug 的回答将 currentUICulture 设置为 Dutch Culture How to change CurrentCulture at runtime?

System.Threading.Thread.CurrentThread.CurrentUICulture =
    CultureInfo.GetCultureInfo(0x0013);

因为仍然显示 GBP 符号,所以我在将数据添加到绑定源之前检查了 currencySymbol:

public void ShowPrices(IEnumerable<Price> prices)
{
    string txt = System.Threading.Thread.CurrentThread.CurrentUICulture.NumberFormat.CurrencySymbol;
    Debug.WriteLine(txt);   
    this.bindingSource1.DataSource = prices;
    ...

调试器输出 window 显示 仍然是货币符号,但 DataGridview 仍然显示 £

如何让它显示欧元符号?

编辑:

NineBerry 在我编辑时抢先一步,但如前所述:只需改用以下内容即可:

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(0x0013);

上一个答案

尝试使用 FormatProvider:

为特定列设置 CultureInfo
this.columnPriceValue.DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo(0x0013);

或者如果 dataGridViewCellStyle2 是价格列的单元格模板的样式:

dataGridViewCellStyle2.FormatProvider = CultureInfo.GetCultureInfo(0x0013);

或者更一般地说,在设置 CurrentUICulture 之后:

dataGridViewCellStyle2.FormatProvider = Thread.CurrentThread.CurrentUICulture;

请设置 Thread.CurrentThread.CurrentCulture,而不是 Thread.CurrentThread.CurrentUICulture

虽然名称似乎暗示着不同的东西,但 CurrentCulture 实际上是用来决定使用什么格式来显示值的。

CurrentUICulture 仅在您使用资源 dll 时有效,然后仅用于决定加载哪个资源 dll。

另见 What is the difference between CurrentCulture and CurrentUICulture properties of CultureInfo in .NET?