#c# #asp.net #sharepoint #currency
#c# #asp.net #sharepoint #Валюта
Вопрос:
Я извлекаю данные из библиотеки sharepoint в таблицу. Для столбца currency я установил его как индийскую валюту. И я установил spfield.dataformatstring как {0:c}. По умолчанию вместо символа индийской валюты отображается символ доллара.
Как я могу показать фактический символ валюты?
Заранее спасибо.
Ответ №1:
Вам нужно передать правильную информацию о культуре в форматировщик, однако я не уверен, сможете ли вы сделать это непосредственно в составном форматировании, однако вы могли бы сделать что-то вроде:
string.Format("The total amount is: {0}", total.ToString("c2",
CultureInfo.CreateSpecificCulture("in-IN"));
Другой вариант заключается в том, чтобы убедиться, что вы правильно настроили язык вашей страницы или сайта в целом — очевидно, сервер считает, что он обслуживает страницы по умолчанию в en-US языке.
Обычно это можно сделать на сайте в web.config, используя <globalization uiCulture="in" culture="in-IN" />
элемент или на уровне страницы в директиве page <%@ Page UICulture="in" Culture="in-IN" %>
.
При этом SharePoint вносит некоторую дополнительную сложность в процесс, требуя, чтобы сайт был создан на требуемом языке и, следовательно, поверх него были установлены правильные языковые пакеты.
Комментарии:
1. Это не сработает для моего сценария. Потому что я добавляю столбцы динамически. Поэтому я не могу получить названия столбцов.
2. @Ramesh.kbvr Тогда вы в значительной степени застряли с правильной настройкой языка для всей страницы или даже сайта. Другой вариант, который может быть доступен, — обработать преобразование валюты в другом месте, прежде чем данные будут привязаны к элементу управления — возможно ли это?
Ответ №2:
Вам нужно установить правильный язык.
Ответ №3:
Я нашел решение. Вот фрагмент кода:
XmlReader reader = XmlReader.Create(new StringReader(spfield.SchemaXml));
XmlDocument doc = new XmlDocument();
XmlNode node = doc.ReadNode(reader);
string curSymbol = "";
if (node.Attributes["LCID"] != null)
{
string lcidValue = node.Attributes["LCID"].Value;
CultureInfo ci = new CultureInfo( Convert.ToInt32(lcidValue));
curSymbol = ci.NumberFormat.CurrencySymbol;
}
field.HtmlEncode = false;
field.DataFormatString = curSymbol " {0:#,###.##}";
Он работает нормально, ничего не делая в web.config.
Комментарии:
1. Учитывая, что вы можете создать объект CultureInfo непосредственно из его LCID ( msdn.microsoft.com/en-us/library/205h6kwc.aspx ) зачем идти на все эти проблемы? Почему бы просто не создать CI непосредственно из LCID, а не перебирать все доступные культуры, пытаясь найти соответствие?