如何检查转换器中的空值

时间:2017-03-17 22:47:18

标签: wpf vb.net data-binding ivalueconverter

我使用SQLDataReader从我的数据库中获取数据并在代码中实例化相应的Object。我处理可能包含空值的所有字段,如下所示(只是一个代码片段示例):

StartDate = If(IsDBNull(rdr(6)), Nothing, rdr.GetDateTime(6)),

我使用此转换器正确显示数据(再次使用DateTime字段作为示例):

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
    Dim x As Date = CDate(value)
    Return x.ToString("yyyy-mm-dd")
End Function

除了缺少DateTime字段的情况外,这种方式可以正常工作。在那种情况下,我需要检查“值”参数,但没有测试我尝试过。我使用了IsNothing和IsDBNull.Value.Equals并将“value”转换为字符串并将其与String.Empty进行比较。即使对于没有数据的字段(在我的数据库中都是Null),它们都返回false。

有没有办法检查“value”参数中的缺失数据?

ETA:以下是我调用转换器的方法:

<Window.Resources>
    <local:DateConverter x:Key="DateConverter">

    </local:DateConverter>
.....
Binding="{Binding Path=ChargeDate, Converter={StaticResource DateConverter}}" />

2 个答案:

答案 0 :(得分:0)

首先,将值类型StartDate设置为Nothing,将其设置为默认值。在这种情况下,如果StartDate是DateTime,则默认值为DateTime.MinValue。您可以通过几种方法实现所需的条件检查。

一,你可以使用=代替Is:

If value = Nothing Then

End If

你也可以检查DateTime.MinValue,但如果你这样做,我会建议你利用你的targetType参数,因为你似乎试图使转换函数具有通用性:

If (targetType = GetType(DateTime) AndAlso value = DateTime.MinValue) Then

End If

或者StartDate可以是Nullable DateTime,这将使Is Nothing对您有用:

Dim StartDate as DateTime? = If(IsDBNull(rdr(6)), Nothing, rdr.GetDateTime(6))

答案 1 :(得分:0)

最终答案: 我只是转换&#34;价值&#34;到日期并将其与任何合理输入之前的任意日期(例如1800)进行比较。如果输入大于该日期,我将其视为有效并退出:

Return CDate(value)