Номер магазина в данных, но зависит от культуры - PullRequest
0 голосов
/ 16 июня 2011

Я потратил так много времени, пытаясь выяснить, как числа работают в разных культурах в C #. Я отсортировал все сценарии, за исключением случаев добавления числа в таблицу данных. В db у меня есть число в американском формате (например, 1.32), во внешнем интерфейсе, если культура немецкая, тогда в сетке она показывает 1,32.

Я могу конвертировать 1,32 в 1,32, используя

Convert.ToDouble("1.32").ToString(Culture.GetCultureInfo("de-DE"))

но когда я добавляю это в таблицу данных в столбце типа double, оно становится равным 132.0.

число в дБ имеет тип double. Вот как я пытаюсь преобразовать его в правильный формат культуры:

dt.Rows.Add(new Object[] { Convert.ToDecimal(ds.Tables[0].Rows[i][5]).ToString(culture.NumberFormat) })

Один из способов - отформатировать число в событии сетки, связанном с строкой, но является ли это правильным решением? Должен быть способ хранения определенного числа культур в datatable.

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Если вы попытаетесь добавить строку в поле DataTable типа double, она будет проанализирована с использованием CultureInfo.CurrentCulture - в вашем случае предположительно с точкой в ​​качестве десятичного разделителя.

Вы должны добавитьУдвойте значение непосредственно в DataTable, а не форматируйте его как строку в другой культуре (de-DE):

dataTable.Rows.Add(..., Convert.ToDouble("1.32"), ...);

вместо:

dataTable.Rows.Add(..., Convert.ToDouble("1.32").ToString(anotherCulture), ...);

Впоследствии вы можете изменить культуруиспользуется для отображения значения из DataTable - то, как вы это делаете, зависит от того, как вы его отображаете, но один из способов:

((double) dataRow["MyDoubleColumn"]).ToString(anotherCulture);
1 голос
/ 16 июня 2011

Когда вы сохраняете значение в базе данных / данных, оно должно иметь тип double, а не string.Двойное значение не заботится о форматировании, только когда оно преобразуется (и отображается) в виде строки.

Что касается форматирования, GridView использует культуру, указанную в CultureInfo.CurrentCulture (можно изменить из кода).Но вы также можете установить конкретное форматирование в BoundField, используя свойство DataFormatString

...