2016-04-04 7 views
1

У меня довольно стандартная комбинация BindingSource/DataGridView. Свойство bindingSource имеет свойство десятичного типа, которое должно отображаться в DataGridView как валюта. Для теста я хочу посмотреть, что это выглядит, как если бы я использовать информацию культуры, которая использует в валюте формате вместо £DataGridView не показывает правильную культуруinfo

Моя проблема в том, что, хотя я программно изменить CurrentUICulture текущего потока (Мое приложение имеет только один поток), мой DataGridView по-прежнему показывает £.

Дизайнер создал для меня следующие фрагментов кода:

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

В конструкторе моей главной формы я установить CurrentUICulture голландской культуру в соответствии с StackOverflow ответа How to change CurrentCulture at runtime?

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

Поскольку знак GBP все еще отображается. Я проверил валютуSymbol перед добавлением данных в источник привязки:

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

Окно выхода отладчика показывает, что по-прежнему является символом валюты, но DataGridview все еще показывает £.

Что делать, чтобы показать ему знак евро?

ответ

2

Do набор Thread.CurrentThread.CurrentCulture, а не Thread.CurrentThread.CurrentUICulture.

Хотя имена, похоже, подразумевают что-то другое, CurrentCulture фактически используется для определения того, какие форматы использовать для отображения значений.

CurrentUICulture имеет значение только при использовании ресурсных dll и затем используется только для определения того, какая ресурс dll загружается.

Смотрите также What is the difference between CurrentCulture and CurrentUICulture properties of CultureInfo in .NET?

+0

Избили меня к нему. +1;) – OhBeWise

0

Edit:

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; 
Смежные вопросы