提问人:T. J. Fan 提问时间:10/19/2023 更新时间:10/19/2023 访问量:68
WPF DataGrid 如何显示 Double.Nan 的空白?
WPF DataGrid How to Display Blank for Double.Nan?
问:
我有大量数据由 DataTable 携带。大多数数据是双精度的;但是,其中许多是 NaN,如下所示:
我想将这些 NaN 值的显示更改为空白。我知道有某种类型的转换器可以实现这一点,但我真的不知道细节。我也知道我可以深入研究数据表中的每个单元格,并以编程方式将 NaN 转换为字符串空白;但是,我正在寻找更简单的方法。
WinForms 中的 DataGrid 有一个名为 CellFormatting 的事件,您可以在其中随意更改显示的文本。但是,我在 WPF 中找不到等效项。
任何帮助都是值得赞赏的。
请注意,DataTable 是动态的,因为列和行不是固定的。它们会根据获得的数据而变化。
答:
2赞
Pratham Nagpure
10/19/2023
#1
您可以为您的CellStyle
DataGrid
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Content.Text,
Mode=OneWay,
RelativeSource={RelativeSource Self}}"
Value="NaN">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
警告:“NaN”的所有内容在视图中都将是空白的。
评论
0赞
T. J. Fan
10/20/2023
这个效果很好。非常感谢!
-1赞
mm8
10/19/2023
#2
您可以使用自定义转换器:
public class DoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double d = (double)value;
if (double.IsNaN(d))
return string.Empty;
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
XAML:
<DataGrid ...>
<DataGrid.Resources>
<local:DoubleConverter x:Key="converter" />
</DataGrid.Resources>
<DataGrid.Columns>
...
<DataGridTextColumn Header="Freight" Binding="{Binding Freight, Converter={StaticResource converter}}" />
<DataGridTextColumn Header="Mean" Binding="{Binding Mean, Converter={StaticResource converter}}" />
...
</DataGrid.Columns>
</DataGrid>
评论
0赞
T. J. Fan
10/20/2023
这种方法不起作用,因为我的数据表是动态的,因为列不是预定义的。它们是在运行时从数据源生成的。也就是说,列数和列标题(如“运费”、“平均值”)每次都会变化。
0赞
mm8
10/21/2023
那么如何创建列呢?显然,您可以通过编程方式以相同的方式设置属性。Converter
0赞
T. J. Fan
10/25/2023
我从数据表创建一个绑定源,然后将其分配给 DataGrid 的 ItemSource。网格的列是从数据表列自动生成的。
0赞
mm8
10/25/2023
然后,您可以处理该事件以创建与转换器的绑定。AutoGeneratedColumns
评论