2011-12-13 103 views
1

我怎样才能得到一个DataGridTextColumn显示' - '(连字符),而不是。WPF DataGridTextColumn - 使用 ' - ' 而不是 '0'

下面是数据网格如何目前设置:

<Grid> 
    <DataGrid x:Name="EmployeeHours" 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding EmployeeHoursLastWeek}" 
      Width="Auto"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="PerceptionistID" 
          Binding="{Binding PerceptionistID}" 
          Width="100" /> 
     <DataGridTextColumn Header="Week Of" 
          Binding="{Binding WeekOf, StringFormat={}{0:MM/dd/yyyy}}" 
          Width="75" /> 
     <DataGridTextColumn Header="Regular Hours" 
          Binding="{Binding WorkHours}" 
          Width="100" /> 
     <DataGridTextColumn Header="PTO Hours" 
          Binding="{Binding PTOHours}" 
          Width="100" /> 
     <DataGridTextColumn Header="Holiday Hours" 
          Binding="{Binding HolidayHours}" 
          Width="100" /> 
    </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

PTOHours和HolidayHours通常是0,它会更容易地识别出具有0以外的值,如果用0任何单元格中显示一个' - 而是。

回答

4

你可以使用一个值转换为它

<Grid> 
    <Grid.Resources> 
    <local:HoursToMinusConverter x:Key="HoursToMinusConverter" /> 
    </Grid.Resources> 

    <DataGrid x:Name="EmployeeHours" 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding EmployeeHoursLastWeek}" 
      Width="Auto"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="PerceptionistID" 
          Binding="{Binding PerceptionistID}" 
          Width="100" /> 
     <DataGridTextColumn Header="Week Of" 
          Binding="{Binding WeekOf, StringFormat={}{0:MM/dd/yyyy}}" 
          Width="75" /> 
     <DataGridTextColumn Header="Regular Hours" 
          Binding="{Binding WorkHours}" 
          Width="100" /> 
     <DataGridTextColumn Header="PTO Hours" 
          Binding="{Binding PTOHours, Converter={StaticResource HoursToMinusConverter}}" 
          Width="100" /> 
     <DataGridTextColumn Header="Holiday Hours" 
          Binding="{Binding HolidayHours, Converter={StaticResource HoursToMinusConverter}}" 
          Width="100" /> 
    </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

这里是转换器

public class HoursToMinusConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
    if (value is int) { 
     return (int)value > 0 ? value.ToString() : "-"; 
    } 
    return string.Empty; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
    if (value is string) { 
     int intValue; 
     if (!int.TryParse((string)value, out intValue)) { 
     intValue = 0; 
     } 
     return intValue; 
    } 
    return 0; 
    } 
} 

希望这有助于

+0

就像一个魅力。由于这些列的数据是十进制类型,因此必须添加'else if'。 – BrianKE 2011-12-14 04:03:58