Мы сохраняем таблицу основных данных в SQL, которая содержит код валюты, описание и символ всех валют, в которые наша компания ведет бизнес. Всего имеется 32. Пример;Есть ли способ сопоставить код валюты ISO обратно в строку культуры?
USD, Доллар США, $
Эти коды используются для поиска информации курсовую, которая автоматически вставляется в другую таблицу SQL. Все наши приложения .NET поддерживают эти валюты. Пользователь устанавливает свою привилегированную валюту в своем профиле.
Мы только недавно начали использовать элементы управления Telerik, а элемент управления RadNumericTextBox берет строку культуры как свойство (т.е. en-US), которая обрабатывает все специфические для культуры настройки (символ, разделитель, группировка и т. Д.), Что делает денежный ввод довольно приятным для пользователя, но это создает проблему.
Теперь актуальная проблема. Я связываю выпадающий список со списком объектов, и для того, чтобы иметь всю необходимую информацию для контроля telerik и информации об обменном курсе, базовые значения должны быть в этом формате. Пример;
: -> EN-US: USD
Logic, который строит валюта объекты
public static List<Currency> BuildCurrencyObjects()
{
List<Currency> currencies = new List<Currency>();
List<Currency> dbCurrencies = CurrencyMgmt.GetCurrencies();
foreach (Currency currency in dbCurrencies)
{
var region = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID))
.Where(ri => ri != null && ri.ISOCurrencySymbol == currency.CurrenyCode)
.FirstOrDefault();
if (region != null)
{
var culture = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Where(x => x.Name.EndsWith((region as RegionInfo).Name))
.FirstOrDefault();
if (culture != null)
{
Currency c = new Currency()
{
CultureCode = culture.Name + ":" + region.ISOCurrencySymbol,
Symbol = culture.NumberFormat.CurrencySymbol,
Description = region.CurrencyEnglishName,
CurrencyRegion = region.EnglishName,
CurrenyCode = region.Name
};
currencies.Add(c);
}
}
}
return currencies;
}
Я написал эту функцию довольно быстро, и оказалось, чтобы работать правильно. Он создает 31 объект валюты и отображает то, что казалось правильным текстом в раскрывающемся списке. Я только осознал, что возникла проблема, когда она была перенесена в нашу тестовую среду, в которой шел текст из Соединенных Штатов; и значение;
США, доллар США, $ -> Карибы, доллар США, $ ан-США: USD -> ан-029: USD
теперь я понимаю, что вышеуказанная логика не будет работать, так как есть несколько культур, которые возвращаются к коду валюты, а Linq возвращает первый элемент в последовательности. Есть ли какой-либо умный способ привязать код валюты к строке культуры?
Я обсуждал сохранение кода культуры в базе данных, но на данный момент, поскольку это был только код ISO, который давал мне проблемы; Я добавил немного Linq, который возвращает объект Region с GeoID США. Не самое изящное решение, но на данный момент оно выполняется. Я вернусь к этому, когда он перейдет к производству в глобальном масштабе. – Mikolz