2013-09-17 2 views
0

Мне нужно написать дубликаты в файл csv в приложении wpf mvvm. Эти двойники изначально являются строками, установленными в инвариантной культуре. я получаю их, как это из приложения на стороне сервера и анализировать их сCultureInfo.CurrentCulture не содержит правильного значения -> проблемы с числовой формулой

bool result = double.TryParse(row[0], NumberStyles.Any, CultureInfo.InvariantCulture, out value); 

Однако, когда я пытаюсь записать их в файл CSV (либо с "" + value, value.ToString(), value.ToString(CultureInfo.CurrentCulture) или value.ToString(System.Globalization.CultureInfo.CurrentCulture)), текущая культура, кажется, EN-US, тогда как он должен быть NL (голландский). Мои настройки браузера, настройки окон, настройки клавиатуры ... установлены на голландский, поэтому, когда я проверяю свои региональные настройки номера, он содержит десятичный разделитель «,», но мое приложение разделяет десятичные знаки на «.». так как культура EN-US.

Поэтому, когда я пишу свой файл csv и открываю его в excel, он содержит десятичные значения, разделенные символом «.». вместо ",". Таким образом, мой excel не видит эти значения в виде десятичных значений, поскольку они не находятся в культуре excel number/my settings settings culture.

Кто-нибудь знает, что происходит?

Редактировать

Просто чтобы быть ясно. Я не ищу способ установить культуру жестко закодированной. Мне особенно нужна культура, установленная в окнах, которую использует excel.

+0

Вы пробовали Thread.CurrentThread.CurrentUICulture? Что там? –

+0

@GerrieSchenck 'Thread.CurrentThread.CurrentUICulture' повлияет на загрузку ресурсов, а не на форматирование. Наверное, вы имеете в виду «Thread.CurrentThread.CurrentCulture»? –

+0

@Fredrik Mörk Я не знал этого, я обычно использую его для форматирования. –

ответ

-1

У вас есть переопределение base.InitializeCulture();

ниже образец кода только для understanding..may быть, вы получите некоторое представление

if (Session["CurrentUI"] != null) 
    { 
     String selectedLanguage = (string)Session["CurrentUI"]; 
     UICulture = selectedLanguage; 
     Culture = selectedLanguage; 

     Thread.CurrentThread.CurrentCulture = 
      CultureInfo.CreateSpecificCulture(selectedLanguage); 
     Thread.CurrentThread.CurrentUICulture = new 
      CultureInfo(selectedLanguage); 
    } 

    base.InitializeCulture(); 
+0

Сессия в WPF ??? –

+0

Я уже упомянул. Это только для понимания .. – user2717258

+0

Спасибо за попытку, но это вряд ли ответ, так как у меня нет сеанса, ни InitializeCulture для сеанса ... –

0

Для дальнейшей ссылки здесь вот в чем проблема:

У нас есть довольно большое приложение, где это возможно переопределить культуру для отображения даты и времени и т. д. После того, как вы установили текущую культуру потока в новую культуру, исходный доступ к нему больше невозможен.

Чтобы иметь доступ к культуре Windows, я создал свойство, которое запоминает текущую культуру, прежде чем оно будет изменено на пользовательский параметр приложения, и использовало его для экспорта моих данных в файл csv.

Смежные вопросы