Выражение для добавления вычисляемого столбца в DataTable со знаком процента

У меня есть DataTable со столбцом VatRate, полученным из столбца базы данных float DataType. Теперь я хочу добавить вычисляемый DataColumn в свой DataTable с VatRate, отформатированным до двух знаков после запятой, и знака %, за которым следует пробел.

Таким образом, если значение в столбце VatRate равно 12.5, тогда значение в ComputedColumn должно быть 12.50 %.

ПРИМЕЧАНИЕ.
Я хочу, чтобы он отображался в элементе отображения Combobox.


person IsmailS    schedule 08.02.2011    source источник


Ответы (2)


Вероятно, было бы проще просто привязать этот столбец к, например. DataGrid, а затем определите в сетке, что этот конкретный столбец должен отображаться в фиксированном формате, например. ##0.00 %.

В общем: не пытайтесь «заставить» ваши данные выглядеть так, как они должны — попробуйте определить для этого свойства отображения в пользовательском интерфейсе!

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

Обновление:

В ASP.NET DropDownList например имеет свойство DataTextFormatString, которое позволяет вам определить отдельный формат отображения для ваших данных.

Winforms ComboBox также имеет свойство FormatString, которое позволяет вам определить, как должны выглядеть данные.

Обновление №2: вы используете Winforms, поэтому установите FormatString в поле со списком:

this.comboBox1.FormatString = "#0.00 %";

а затем введите такие значения, как 0.0875, 0.125 и т. д. — они будут отображаться как 8.75 % и 12.50 % соответственно.

person marc_s    schedule 08.02.2011
comment
Я хочу это на DisplayMember из Combobox - person IsmailS; 08.02.2011
comment
@ismail: winforms? asp.net? ВПФ? - person marc_s; 08.02.2011
comment
винформы. Извиняюсь! теперь добавлен тег winform. - person IsmailS; 08.02.2011
comment
vatRatesDataTable.Columns.Add(new DataColumn("VatRateWithPercent", typeof(string), "Convert(VatRate, 'System.String') + ' %'")); работал. Но я хочу VatRate с двумя знаками после запятой. Есть идеи??? - person IsmailS; 08.02.2011
comment
Или даже если вы можете дать мне FormatString - person IsmailS; 08.02.2011
comment
Почему он умножает его на сто? У меня уже есть правильные значения в БД - person IsmailS; 08.02.2011
comment
@Ismail: вам нужны процентные данные; 0,08 = 8% - это потому, что у вас есть% в вашей FormatString - он интерпретирует данные как процент. - person marc_s; 08.02.2011

Если бы форматирование не было проблемой, вы могли бы использовать такое выражение:

myDataColumn.Expression="Convert(VatRate, 'System.String') + '%'"

Но зачем вам дополнительные столбцы? Разве вы не можете просто привязать строку формата к привязке, используемой для отображения данных в вашем From/Window/Page, или использовать ToString(...) при записи в каком-либо потоке?

person BertuPG    schedule 08.02.2011
comment
Спасибо, vatRatesDataTable.Columns.Add(new DataColumn("VatRateWithPercent", typeof(string), "Convert(VatRate, 'System.String') + ' %'")); сработало. Но я хочу VatRate с двумя знаками после запятой. Есть идеи??? - person IsmailS; 08.02.2011
comment
Вы читали сообщения/комментарии о привязке и/или форматировании? Вы должны форматировать свои данные в презентации, а не хранить (даже если просто в памяти, например, с таблицей данных). Если вам по-прежнему нужен формат в выражении столбца, вы можете использовать функции Len и Substring, чтобы получить правильную формулу, но вам потребуется несколько экземпляров Convert(..., ...) и вы получите очень длинное выражение. Я думаю, что это не лучший способ, и вы должны форматировать свои данные только на этапе презентации. - person BertuPG; 08.02.2011