2016-04-04 36 views
1

我有一个相当标准的BindingSource/DataGridView组合。 bindingSource具有必须在DataGridView中作为货币显示的十进制类型属性。对于一个测试,我想看看是什么样子,如果我使用了一个作为货币格式,而不是£DataGridView无法显示正确的cultureinfo

文化信息我的问题是,虽然我编程方式更改当前线程的的CurrentUICulture(我的应用程序只有一个线程),我的DataGridView仍然显示为£

,我创建了下面的代码片段设计者:

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

在我的主要形式的构造函数我根据计算器的答案的CurrentUICulture设置为荷兰文化How to change CurrentCulture at runtime?

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

编辑

NineBerry打我给它,因为我是编辑,但指出:只要使用,而不是执行以下操作:

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

以前的答案

尝试使用设置特定列的:

this.columnPriceValue.DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo(0x0013); 

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

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

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

dataGridViewCellStyle2.FormatProvider = Thread.CurrentThread.CurrentUICulture;