Отображение символов валюты в сетке

#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, а не перебирать все доступные культуры, пытаясь найти соответствие?