Просто удалите ToString
:
Currency = String.Format("{0:C}", it.Decimal)
Вы также можете использовать эту форму:
Currency = it.Decimal.ToString("C")
Если вы передаете it.Decimal.ToString()
в качестве параметра String.Format
, этобудет обрабатываться как строка, а не как десятичная дробь, поэтому он не сможет применить формат валюты.
РЕДАКТИРОВАТЬ: хорошо, так что у вас есть другая проблема ... Не забывайте, чтозапрос Linq to SQL (или Entity Framework) преобразуется в SQL и выполняется базой данных;база данных не знает String.Format
, поэтому ее нельзя преобразовать в SQL.Вам нужно извлечь «сырой» результат из БД, а затем отформатировать его, используя Linq to Objects:
var query = from it in DataContext.Items
where it.ThingId == thing.ThingId
select new
{
it.Something,
it.SomethingElse,
it.AnotherSomething,
it.Decimal
};
GridView.DataSource = from it in query.AsEnumerable()
select new
{
it.Something,
it.SomethingElse,
it.AnotherSomething,
Currency = it.Decimal.ToString("C")
};
(обратите внимание на использование AsEnumerable
для «переключения» на Linq to Objects)
Другим вариантом было бы присвоить необработанное десятичное значение GridView
и установить для свойства столбца DataFormatString
значение "C"