【问题标题】:WPF DataGridTextColumn - Use '-' instead of '0'WPF DataGridTextColumn - 使用“-”而不是“0”
【发布时间】:2011-12-13 19:15:09
【问题描述】:

如何让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 的单元格。

【问题讨论】:

    标签: wpf wpfdatagrid ivalueconverter datagridtextcolumn


    【解决方案1】:

    你可以使用一个值转换器

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

    希望对你有帮助

    【讨论】:

    • 像魅力一样工作。必须添加一个“else if”,因为这些列的数据是十进制类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2015-11-08
    • 2010-09-21
    • 1970-01-01
    • 2011-06-17
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多