2

我第一次在 WPF 中开发一个程序。我在 GridView 模式下有一个 ListView,显示来自绑定数据集(从数据库中获取)的数据。

在我的数据库中,“出生日期”不是必填字段。因此,任何没有 dob 的记录都将值设置为DateTime.MinValue。在每个最小值日期,日期在单元格中显示为 01/01/0001。我正在尝试找到一种方法来格式化单元格以使其DateTime.MinValue不显示,或者将每个单元格替换MinValue"".

我的想法是要么使用日期所在文本块的“已加载”事件并替换“01/01/0001”的每个实例,或者在将数据集发送到 GridView 之前循环遍历数据集并在那里删除/替换它们。我也没有运气弄清楚该怎么做。

我的 GridView 的 xaml 代码是:

<Grid>
    <ListView x:Name="resultsListView" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" Margin="0,54,0,28" ItemsSource="{Binding Path=Table}">
    <ListView.View>
    <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding Path=LastName}"
            Header="Last Name" 
            Width="150"/>
        <GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" 
            Header="First Name"
            Width="100"/>
        <GridViewColumn DisplayMemberBinding="{Binding Path=MiddleName}" 
            Header="Middle Name"
            Width="100"/>
        <GridViewColumn Header="Date of Birth" Width="100">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock TextAlignment="Justify" Text="{Binding Path=DateOfBirth, StringFormat='{}{0:MM/dd/yyyy}'}" Loaded="TextBlock_Loaded" />
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
    </ListView.View>
    </ListView>
</Grid>

数据集的代码:

private void FillListView(DataSet ds)
{
    if (resultsListView.Items.Count != 0)
    {
        resultsListView.Items.Clear();
    }
    resultsListView.DataContext = ds.Tables[0].DefaultView;
}

任何关于如何DateTime.MinValue在我的 GridView 中显示空白的建议将不胜感激!

4

1 回答 1

2

我会做一个IValueConverter处理这个问题,并将它包含在你的绑定表达式中。

在您的资源中:

<local:DateTimeConverter x:Key="DateTimeConverter" />

然后更新您的绑定:

<TextBlock Text="{Binding Path=DateOfBirth, 
                          Converter={StaticResource DateTimeConverter},
                          ConverterParameter='MM/dd/yyyy'}" />

然后定义类:

public class DateTimeConverter : IValueConverter

这有两种方法。您只需要实现Convert(除非您计划使用双向绑定)。在此方法中,您可以通过参数获取格式字符串(正如我在上面的绑定表达式中传递的那样),还可以检查DateTime.MinValue并返回一个空白字符串。

于 2009-10-05T20:07:05.047 回答