0

我的表(varchar)中有一个包含日期和字符串的列,名为 DateColumn,我想将其显示为日期以便能够按日期过滤。我首先尝试使用 GetData(DateColumn) 创建一个带有 unboundexpression 的未绑定列,并且它起作用了,所有带有日期的字符串都转换为日期,另一个是#Err。我能够按日期过滤。但我想控制这些#Err:它是空的?它的“其他字符串”?还是其他的?所以我尝试了 CustomUnboundColumnData 函数:

           Try
               value = Date.Parse(view.GetListSourceRowCellValue(listSourceRowIndex, columna))
           Catch ex As Exception
               If IsDBNull(view.GetListSourceRowCellValue(listSourceRowIndex, columna)) Then
                   value = DBNull.Value
               Else
                   If view.GetListSourceRowCellValue(listSourceRowIndex, columna) = "" Then
                       value = DBNull.Value
                   ElseIf view.GetListSourceRowCellValue(listSourceRowIndex, columna) = "otherstring" Then
                       value = "#otherstring"
                   Else
                       value = "#Err"
                   End If
               End If

           End Try 

但是现在当我尝试按值(按日期)过滤时,出现错误:

无法比较数组中的两项。: System.ArgumentException: 对象必须是字符串类型。

如果我替换 DBNull.Value 的“#Err”和“#otherstring”,它会再次起作用。但我需要能够放置其他字符串。

4

1 回答 1

0

不要将Try...End Try用于完全预期的错误。你根本没有使用ex

使用TryParse. 您可以通过分配明显虚假的日期来区分空值和其他字符串。创建一个坏字符串列表以供审查。

    Dim d As Date
    Dim value As Date
    Dim errList As New List(Of String)
    If Date.TryParse(View.GetListSourceRowCellValue(listSourceRowIndex, columna), d) Then
        value = d
    ElseIf IsDBNull(View.GetListSourceRowCellValue(listSourceRowIndex, columna)) Then
        value = CDate("January 2, 0001 ")
    ElseIf View.GetListSourceRowCellValue(listSourceRowIndex, columna) = "" Then
        value = CDate("January 2, 0001 ")
    Else
        value = CDate("January 1, 0001")
        errList.Add(View.GetListSourceRowCellValue(listSourceRowIndex, columna).ToString)
    End If
于 2022-01-16T23:55:27.667 回答