我使用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}}" />
答案 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)