WPF DataGridTextColumn - Use '-' instead of '0'
-
15-03-2021 - |
문제
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
제휴하지 않습니다 StackOverflow