Используя форматирование строки .NET, как мне отформатировать строку для отображения пустого (пустая строка) для нуля (0)? - PullRequest
6 голосов
/ 17 февраля 2010

Я использую выражение DataBinder.Eval в сетке данных ASP.NET, но я думаю, что этот вопрос относится к форматированию строк в .NET в целом. Клиент запросил, чтобы, если значение строки равно 0, оно не отображалось. У меня есть следующий хак для этого:

<%# IIf(DataBinder.Eval(Container.DataItem, "MSDWhole").Trim = "0", "", 
    DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0}"))  %>

Я хотел бы изменить выражение форматирования {0:N0}, чтобы можно было исключить оператор IIf, но не могу найти ничего, что работает.

Ответы [ 4 ]

10 голосов
/ 17 февраля 2010

Вам необходимо использовать разделитель разделов , например:

<%# DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0;; }").Trim() %>

Обратите внимание, что только отрицательный раздел может быть пустым, поэтому мне нужно поставить пробел в 0 раздел.(Прочтите документацию )

3 голосов
/ 09 сентября 2010

с учетом принятого ответа:

<%# DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0;; }").Trim() %>

Пробел помещается в 3-ю позицию, однако размещение # в третьей позиции избавит от необходимости вызывать Trim().

<%# DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0;;#}") %>
0 голосов
/ 17 февраля 2010

Попробуйте вызвать функцию во время связывания, как это

<%# MyFunction( DataBinder.Eval(Container.DataItem, "MSDWhole") ) %>

и внутри функции сделайте необходимое форматирование

0 голосов
/ 17 февраля 2010

Используйте пользовательский метод.

public static string MyFormat(double value) {       
    return value == 0 ? "" : value.ToString("0");
}

<%# MyFormat(Convert.ToDouble(Eval("MSDWhole"))) %>
...