我有一个相当标准的BindingSource / DataGridView组合。 bindingSource具有十进制类型属性,必须在DataGridView中显示为货币。对于测试,我想看看如果我使用€作为货币格式而不是£
的文化信息,它会是什么样子我的问题是,尽管我以编程方式更改了当前线程的CurrentUICulture(我的应用程序只有一个线程),但我的DataGridView仍显示£。
设计师为我创建了以下代码片段:
this.columnPriceValue = new Forms.DataGridViewTextBoxColumn();
this.columnPriceValue.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
this.columnPriceValue.DataPropertyName = "Value";
dataGridViewCellStyle2.Format = "C4";
...
在我的主窗体的构造函数中,我根据stackoverflow的回答How to change CurrentCulture at runtime?
将currentUICulture设置为荷兰文化System.Threading.Thread.CurrentThread.CurrentUICulture =
CultureInfo.GetCultureInfo(0x0013);
由于GBP符号仍然显示,我在将数据添加到bindingsource之前检查了currencySymbol:
public void ShowPrices(IEnumerable<Price> prices)
{
string txt = System.Threading.Thread.CurrentThread.CurrentUICulture.NumberFormat.CurrencySymbol;
Debug.WriteLine(txt);
this.bindingSource1.DataSource = prices;
...
调试器输出窗口显示€仍然是货币符号,但DataGridview仍显示£。
如何让它显示欧元符号?
答案 0 :(得分:2)
设置Thread.CurrentThread.CurrentCulture
,而不是Thread.CurrentThread.CurrentUICulture
。
虽然这些名称似乎暗示了不同的东西,但CurrentCulture
实际上用于决定用于显示值的格式。
CurrentUICulture
仅在您使用资源dll时有效,然后仅用于决定加载哪个资源dll。
答案 1 :(得分:0)
修改强>:
NineBerry在编辑时打败了我,但如上所述:只需使用以下内容:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(0x0013);
上一个答案:
尝试使用CultureInfo
:
FormatProvider
this.columnPriceValue.DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo(0x0013);
或者dataGridViewCellStyle2
是价格列的单元格模板的样式:
dataGridViewCellStyle2.FormatProvider = CultureInfo.GetCultureInfo(0x0013);
或者更一般地说,在设置CurrentUICulture
:
dataGridViewCellStyle2.FormatProvider = Thread.CurrentThread.CurrentUICulture;