在报告中有一列,其字符串日期字段的格式为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()。
答案 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)转换为正确的数据类型并使用它。