質問

How can I get a DataGridTextColumn to display a '-' (hyphen) instead of 0.

Here is how the data grid is currently setup:

<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 and HolidayHours are typically 0 and it would make it easier to identify cells with a value other than 0 if any cell with 0 displayed a '-' instead.

役に立ちましたか?

解決

you can use a value converter for it

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

here is the converter

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

hope this helps

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top