1

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

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

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

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

------------- InnerException ------------- 执行函数 CDate() 时发生错误。检查 InnerException 以获取更多信息。------------- InnerException ------------- 调用目标抛出异常。------------- InnerException ------------- 字符串未被识别为有效的 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()。

4

2 回答 2

3

公共静态日期时间 EmptyDateToNow(字符串过期日期)

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

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

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

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

于 2011-07-11T23:30:14.447 回答
0

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

于 2011-10-04T20:53:48.267 回答