2011-03-18 3 views
1

보고서에 MM/dd/yyyy 형식의 문자열 날짜 필드가있는 열이 있습니다. 일부 열은 빈 문자열을 포함 할 수 있습니다. 섹션을 정렬하는 데 문제가 있습니다. 나는 telerik보고에 대략 10 시간이다 그래서 나는 명백한 무언가를 놓칠지도 모른다.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

공개 정적 DateTime EmptyDateToNow (string expirationDate)

Telerik Reporting은 사용자 기능이 정적 메서드가되기를 원합니다.

첫 번째 접근법의 문제점은 표현식이 참일 경우에도 CDate (Fields.ExpirationDate)가 실행되어 예외가 throw되는 경우에도 발생한다고 생각합니다. 당신은 사용자 함수를 정의하지 않고 원하는 결과를 얻기 위해 이런 식으로 뭔가를 시도 할 수 있습니다 :

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

나는이 조금 오래 실현, 난 그냥 문제를 가진이 검색되는 경우 다른 사람에 게시하고 싶었다.

0

사용자 기능을 정적으로 설정합니다. 통화가 여전히 실패하면 전화를 정규화합니다 (예 : Myclass.EmptyDateToNow (Fields.ExpirationDate)).
함수가 매개 변수 (문자열 또는 다른 데이터 형식 아님)로 개체를 받도록 설정합니다.
함수 내부에서 null을 확인한 다음 (null이 아님) 올바른 데이터 형식으로 변환하여 처리하십시오.

관련 문제