如何在小数点c#4.0 wpf datagrid之后使用或不使用零来格式化十进制值

时间:2013-12-05 08:27:20

标签: wpf visual-studio-2010 c#-4.0 wpfdatagrid

如果小数是整数,我想显示十进制值而不尾随零,即如果值为10000000.00,那么我使用stringFormat =“0,0。####”将值显示为10,000,000。 如果小数值是10000000.57那么它将显示10,000,000.57,这很好。现在问题是如果值是10000000.50然后它显示为10,000,000.5,这是不正确的,因为stringFormat =“0,0。####”。我正在使用的stringFormat在app.config文件中提到,如下所示

<add source="currency1Amount"  headerText="Currency 1 Amount" filterType="textFilter" rowType="textRow" hasSpecifiedSource="" stringFormat="0,0.####" alignment="right"/>
    <add source="currency2Amount"  headerText="Currency 2 Amount" filterType="textFilter" rowType="textRow" hasSpecifiedSource="" stringFormat="0,0.####" alignment="right"/>

除此之外,还有很多列在运行时显示(值)意味着数据网格和服务器值的映射是动态生成的。所以我对上面两列中显示的值没有多少控制权。

是否可以定义stringFormat以满足我的上述要求并解决问题,即如果值为10000000.50则应显示10,000,000.50而不是10,000,000.5

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

我认为你可以提供IValueConverter

public class SpecialFormatting : IValueConverter
{
    public object Convert(object value, Type targetType, 
                          object parameter, CultureInfo culture)
    {
        double number = (double)value;
        if(number % 1 == 0)
            return string.Format("{0:N0}",number);
        return string.Format("{0:N2}",number);
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
    }
}

在WPF中

<DataGrid>
    <DataGrid.Resources>
        <SpecialFormatting x:Key="SpecialFormattingConverter"/>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=MyNumber, 
            Converter={StaticResource SpecialFormattingConverter}}"/>
    </DataGrid.Columns>
</DataGrid>