2010-07-02 3 views
9

RDLC 필드 뒤에있는 표현식에 확장 메소드를 쓸 수 있습니까?RDLC 표현 확장 메소드

예를 들어 데이터 값에 유효한 값이 있거나 null 일 수있는 DateTime 필드가 있다고 가정 해 봅시다. 내 RDLC에 TextBox를 끌어다 놓고 ToShortDateString() 메서드를 사용하여 값을 형식화합니다. 이것은 채워진 DateTime 값에 대해서는 정상적으로 작동하지만 NULL 필드에서 .ToShortDateString()을 수행하려고하면 런타임시 예외가 발생합니다.

RDLC 표현식에서 사용할 수있는 확장 메서드를 작성할 수 있는지 궁금 해서요. DateTime 값을 처리 할 때 .ConvertFromNullToEmptyString()과 같은 메서드를 호출 할 수 있습니다.

물론이 문제를 해결할 수있는 다른 방법이 있지만 RDLC 표현식에 사용할 확장 방법이 내 비즈니스 문제를 해결할 수있는 방법인지 궁금합니다.

감사합니다.

+1

+1 : 좋은 질문입니다. 나는 그렇게 생각하지만 결코 알아낼 시간이 없었다. 누군가가 대답하기를 바랍니다. – AMissico

+0

나는 이것을 간단히 추측하고있다. 나쁘다 - 나는 결정적인 대답에 기초하여 현상금을 보람을 고대했다. – DanP

+0

은 ssrs 또는 asp.net 보고서 뷰어 컨트롤을 사용하고 있습니까? RDLC 파일은 ssrs 보고서 정의 언어 파일이기 때문에 질문합니다. RDLC는 보고서를 표시하기 위해 asp.net에서 사용하는 보고서 정의 클라이언트 언어 파일입니다. sans srs – CodeMonkey1313

답변

2

예, 가능합니다. 보고서에 embed code directly 또는 custom assembly을 포함 할 수 있습니다.

+0

이러한 메서드는 확장 메서드를 사용하는 예제가 아닙니다. 어떤 질문을 묻는 것입니다 ... – DanP

+0

@ DanP : 이것은 확장 메서드를 추가하는 동안 코드를 호출하는 것은 일반 표현식과 같은 방식으로 이루어집니다. – CodeMonkey1313

0

질문에 대한 해결책에 코리나 (Corina)와 동의하지만, 내장 식을 사용하여 그녀가 제안한 경로를 거치지 않고도 더 나은 솔루션을 얻을 수 있다고 믿습니다. SQL에서 오는 DateTime을 가지고있는 경우, 정확할 수도 있지만 null 일 수 있습니다. null/nothing을 확인하려면 IIF 문을 사용하여이 테스트를 쉽게 수행 할 수 있습니다 (표현식은 기본적으로 VB임을 기억하십시오)./empty 그리고 뭔가있는 한 원하는 작업을 실행하고, 그렇지 않으면 공백으로 반환하십시오. 결과적으로 IIF의 유형은 아마도 문자열 일 것이므로 조심하십시오.

+1

나는 OP 또는 Amissico를 위해 발화시킬 수는 없지만; 저는 개인적으로 확장 메소드에 특별히 관심이 있습니다. 보고서에서 임의의 사용자 정의 코드를 사용하는 방법은 이미 매우 잘 알려져 있습니다. 따라서이 라인의 답변은 다소 의미가 없습니다. – DanP

+0

당신이 묻는 것 중 하나는 리플렉션이 아마도이 메소드를 실행하는 데 사용되고 있다는 것입니다. 그래서 null 객체 (null datetime)에서 .ConvertFromNullToEmptyString()을 호출하면 DateTime?을 다시 작성하지 않는 한 상관없이 null 참조 예외가 발생합니다. 개체에 요청하는 기능을 제공하는 ConvertFromNullToEmptyString이라는 정적 메서드가 있습니다.현재이 특정 기능이 사용자 정의 코드보다 어떤 이점을 제공하는지 보지는 못합니다. – CodeMonkey1313

2

개체의 인스턴스에서 확장 메서드를 사용할 수 있지만 AS 확장 메서드는 사용할 수 없습니다. 그들이 회원 인 유형에 대한 정적 메소드 호출로 호출해야합니다. 따라서 myDictionary.Values.Sum() 대신 사전 인스턴스의 Values 메서드에서 Sum 메서드를 호출하면 System.Linq.Enumerable.Sum(myDictionary.Values) - 인스턴스를 Enumerable 유형의 정적 Sum 메서드로 전달할 수 있습니다.이 예제에서는 보고서가 System.Core 어셈블리를 참조해야합니다.). 그래서 네, 당신은 확장 인 메소드를 사용할 수 있습니다. 그러나 어쨌든 나타납니다. 특정 인스턴스의 확장이 아닙니다.