WPF DataGridTextColumn - используйте «-» вместо «0» - PullRequest
1 голос
/ 13 декабря 2011

Как получить 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 отображала '-' вместо этого.

1 Ответ

4 голосов
/ 13 декабря 2011

вы можете использовать конвертер значений для него

<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;
  }
}

надеюсь, это поможет

...