WPF DataGrid将单元格格式化为千位分隔符

时间:2017-05-17 10:24:16

标签: c# wpf datagrid

我的WPF应用程序中有DataGrid视图,它从任何给定的数据库加载任何给定表的数据。现在我想将表格内容的所有数值转换为千位分隔符。

 <DataGrid  BorderBrush="Black" Background="White" Margin="10,0,10,10" FontSize="18" BorderThickness="1,0,1,1" RowHeaderWidth="0" x:Name="preview" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" IsTextSearchEnabled="True" IsTextSearchCaseSensitive="False" IsReadOnly="True" CanUserSortColumns="False" FontFamily="Arial" >
    <DataGrid.Resources>
        <Style TargetType="{x:Type ContentControl}">
            <Setter Property="ContentStringFormat" Value="{Binding StringFormat={}{0:N}}"/>
        </Style>
    </DataGrid.Resources>
</DataGrid>

但这并没有影响。实现它的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

没有implcit样式可以应用于DataGrid的所有列的所有绑定。

您必须在每个单独的绑定上设置StringFormat属性。如果明确定义列,则可以在XAML标记中执行此操作,例如:

<DataGrid x:Name="dg" AutoGenerateColumns="False" xmlns:s="clr-namespace:System;assembly=mscorlib">
    <DataGrid.Resources>
        <s:String x:Key="format">{0:N}</s:String>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="num" Binding="{Binding Num, StringFormat={StaticResource format}}" />
        <DataGridTextColumn Header="num" Binding="{Binding Num2, StringFormat={StaticResource format}}" />
    </DataGrid.Columns>
</DataGrid>

或者您可以处理AutoGeneratingColumn事件,例如:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    DataGridTextColumn col = e.Column as DataGridTextColumn;
    if (col != null && e.PropertyType == typeof(decimal) || e.PropertyType == typeof(double))
    {
        col.Binding = new Binding(e.PropertyName) { StringFormat = "{0:N}" };
    }
}