按日期排序,Telerik Reports可能为空

时间:2011-03-18 15:22:45

标签: telerik telerik-reporting

在报告中有一列,其字符串日期字段的格式为MM / dd / yyyy。其中一些列可能包含空字符串。排序部分时出现问题。我大约需要10个小时进行telerik报告,所以我可能会遗漏一些明显的东西。

我最初尝试使用这样的表达式:

=IIf(Fields.ExpirationDate='', CDate('1/1/1990'), CDate(Fields.ExpirationDate))

这看起来是否正确?这引发了一个错误: 处理报告''时发生错误: 无法比较数组中的两个元素。

  

------------- InnerException -------------执行函数CDate()时发生错误。   检查InnerException以获取更多信息   信息。   ------------- InnerException -------------调用目标抛出了异常。   ------------- InnerException ------------- String未被识别为有效的DateTime。

另一位开发人员建议使用自定义方法,因此我在report.cs文件中创建了

    public DateTime EmptyDateToNow( string expirationDate )
    {
        DateTime parsed;
        if (!DateTime.TryParse(expirationDate, out parsed))
            return DateTime.Now;

        return parsed;
    }

然后尝试使用= EmptyDateToNow(Fields.ExpirationDate)调用

并抛出错误:

  

处理时发生错误   报告'':无法比较两个   数组中的元素。   ------------- InnerException -------------表达式包含未定义的函数调用   EmptyDateToNow()。

2 个答案:

答案 0 :(得分:3)

public static DateTime EmptyDateToNow(string expirationDate)

我认为Telerik Reporting希望您的用户功能是静态方法。

我认为第一种方法的问题是即使表达式为true也会执行CDate(Fields.ExpirationDate),从而导致抛出异常。您可以尝试这样的方法来获得所需的结果,而无需定义用户函数:

=CDate(IIf(IsNull(Fields.ExpirationDate) Or Fields.ExpirationDate="", "1/1/1990", Fields.ExpirationDate))

我意识到这有点老了,我只想发帖以防其他人遇到麻烦并搜索此内容。

答案 1 :(得分:0)

使用户功能静止(如果呼叫仍然失败,请使呼叫完全合格。例如= Myclass.EmptyDateToNow(Fields.ExpirationDate))。
使函数接收对象作为参数(不是字符串或任何其他数据类型) 在函数内部,检查null然后(它不为null)转换为正确的数据类型并使用它。