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?
我有一个相当标准的 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?