Можно ли отформатировать число с использованием настроек Current Culture, но показывать 0 как пустое? - PullRequest
4 голосов
/ 16 июня 2011

Я хотел бы отображать суммы в валюте (в ячейках DataGridView), используя текущие настройки культуры, определенные System.Globalisation.CultureInfo.CurrentCulture.NumberFormat, за исключением того, что я не хочу, чтобы отображались нулевые значения - т.е. я хочу, чтобы они отображалисьоставьте пустым

Итак, я хочу знать, возможно ли объединить следующие два подхода к отображению значений:

string.format("{0:c}", 1)  // will show $1.00 on a machine with typical English (US) settings

НО;

string.format("{0:c}", 0)  // will show $0.00 on a machine with typical English (US) settings

Я понимаюЯ могу достичь того, что хочу, используя;

string.format("{0:"$##,##0.00";($##,##0.00);''}", 0)

, однако, насколько я понимаю, это не будет чувствительно к культурным условиям.

Можно достичь того и другого, и если да, то как?

Я ищу решение, которое можно реализовать, в лучшем случае, установив свойство format для DataGridViewCell и, таким образом, позволяя DataGridView позаботиться обо всем форматировании для меня.Может быть, мне нужно создать подкласс этого типа ячеек и что-то переопределить ...?

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Вы можете создать провайдера нестандартного формата и затем использовать его для свойства Format.Это должно помочь http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx#Y990

0 голосов
/ 16 июня 2011

Надеюсь, это то, что вы ищете

CultureInfo cinfo = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
cinfo.NumberFormat.CurrencyDecimalDigits = 0;

Теперь у вас есть необходимые изменения, сделанные в классе CultureInfo. Теперь присвойте это CultureInfo обратно CurrentCulture и CurrentUICulture, и вам будет хорошо идти

EDIT Это поможет вам в подавлении нуля

string.Format("{0}{1:#.#}", Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol, value);
0 голосов
/ 16 июня 2011
string s = "";
if(amount != 0){
    s = string.Format("{0:c}", amount);
}
...