1

MM/dd/yyyy 形式の文字列日付フィールドを持つレポートの列を作成します。これらの列の一部には、空の文字列が含まれている場合があります。セクションの並べ替えに問題があります。私は Telerik の報告に約 10 時間かかっているので、明らかな何かを見落としている可能性があります。

私は最初、次のような表現を使用しようとしました。

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

それは正しいように見えますか?これによりエラーが発生しました: レポート '' の処理中にエラーが発生しました: 配列内の 2 つの要素を比較できませんでした。

------------- 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) で呼び出そうとしました

これはエラーをスローします:

レポート '' の処理中にエラーが発生しました: 配列内の 2 つの要素を比較できませんでした。------------- InnerException ------------- 式に未定義の関数呼び出し EmptyDateToNow() が含まれています。

4

2 に答える 2

3

public static DateTime 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 に答える