C# 在WPF DataGrid中格式化可为空的DataTime
在WPF应用程序中,我在datagrid中显示数据。 在这个数据网格中有一些日期时间值 如果未设置DateTime,则显示01/01/0001,这是正常的,因为DateTime不可为空 在这种情况下,我想显示“-” 我想我需要用一个转换器 我试过这个:C# 在WPF DataGrid中格式化可为空的DataTime,c#,wpf,xaml,converter,ivalueconverter,C#,Wpf,Xaml,Converter,Ivalueconverter,在WPF应用程序中,我在datagrid中显示数据。 在这个数据网格中有一些日期时间值 如果未设置DateTime,则显示01/01/0001,这是正常的,因为DateTime不可为空 在这种情况下,我想显示“-” 我想我需要用一个转换器 我试过这个: xmlns:converter="clr-namespace:myNameSpace" <DataGrid Grid.Column="0" Grid.Row="2"> <DataGrid.Columns>
xmlns:converter="clr-namespace:myNameSpace"
<DataGrid Grid.Column="0" Grid.Row="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{ Binding Path= dDate,StringFormat={}{0:dd/MM/yyyy HH:mm},Converter={converter:Converter.DateConverter}}" Header=" Date " Width="Auto" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
利用制度全球化;
使用System.Windows.Data
namespace Phoenix_CRM
{
public class Converter
{
}
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return "--/--/----";
DateTime returnVal;
if (DateTime.TryParse(value.ToString(), out returnVal))
{
if (returnVal != DateTime.MinValue)
return returnVal;
else
return "--/--/----";
}
else
return "--/--/----";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return DateTime.MinValue;
DateTime val;
if (value.ToString() == "--/--/----")
return DateTime.MinValue;
if (DateTime.TryParse(value.ToString(), out val))
return val;
else
return DateTime.MinValue;
}
}
}
我在我的XAML中添加了这个:
xmlns:converter="clr-namespace:myNameSpace"
<DataGrid Grid.Column="0" Grid.Row="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{ Binding Path= dDate,StringFormat={}{0:dd/MM/yyyy HH:mm},Converter={converter:Converter.DateConverter}}" Header=" Date " Width="Auto" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
在之后打开:
xmlns:converter="clr-namespace:myNameSpace"
<DataGrid Grid.Column="0" Grid.Row="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{ Binding Path= dDate,StringFormat={}{0:dd/MM/yyyy HH:mm},Converter={converter:Converter.DateConverter}}" Header=" Date " Width="Auto" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
任何人都可以帮助我吗?要使用转换器,您必须将其定义为资源并使用该资源:
<Window.Resources>
<converter:DateConverter x:Key="DateConverter" />
</Window.Resources>
有关更多信息,请参阅。
<Window.Resources>
<converter:DateConverter x:Key="DateConverter" />
</Window.Resources>
<DataGrid Grid.Column="0" Grid.Row="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path= dDate,StringFormat={}{0:dd/MM/yyyy HH:mm},Converter={StaticResource DateConverter}}" Header=" Date " Width="Auto" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
谢谢:)代码可以编译!但是,我有一个XamlParseException,InnerException:找不到名为“DateConverter”@WalterFabioSimoni的ressource:尝试将资源放在窗口或用户控件的资源集合中,而不是数据网格中。是的!没关系:)非常感谢:)