2011-03-18 71 views
1

在報告中有一個字符串日期字段,格式爲MM/dd/yyyy。其中一些列可能包含空字符串。排序某個部分時出現問題。我約10小時到telerik報告,所以我可能會失去一些明顯的東西。根據Telerik報告可能爲空的日期進行排序

我最初試圖用這樣的表達:

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

這是否看起來是正確的?這引發了一個錯誤: 處理報告「'時發生錯誤: 未能比較數組中的兩個元素。

------------- InnerException ------------- An error has occured while executing function CDate(). Check InnerException for further information. ------------- InnerException ------------- Exception has been thrown by the target of an invocation. ------------- InnerException ------------- String was not recognized as a valid DateTime.

使用自定義的方法中的另一顯影劑建議所以我創建內部的report.cs文件

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

     return parsed; 
    } 

,然後試圖與= EmptyDateToNow(Fields.ExpirationDate)

和這將引發調用錯誤:

An error has occured while processing Report '': Failed to compare two elements in the array. ------------- InnerException ------------- The expression contains undefined function call EmptyDateToNow().

回答

2

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)) 

我意識到這是一個有點老了,我只是想萬一別人張貼在遇到問題時,尋找這一點。

0

使用戶函數靜態(如果調用仍然失敗,請使調用完全合格,例如= Myclass.EmptyDateToNow(Fields.ExpirationDate))。
使函數接收一個對象作爲參數(而不是字符串或任何其他數據類型)。
在函數內部,檢查null,然後(它不爲空)轉換爲正確的數據類型並使用它。

相關問題