1

クラスのオブジェクトを CR のデータソースとして設定しました。すべての文字列フィールドは、デザインのフィールド エクスプローラーに正しく表示されます。しかし、数値フィールドや日時フィールドはどうなるでしょうか? どのようにそれらを持ってきますか?

public class ClsOutDocket
{
    public string RegistrationNo { get; set; }        
    public double? WeightIn { get; set; }        
    public DateTime? DateIn { get; set; }        
    public string TimeIn { get; set; }
}
4

1 に答える 1

3

残念ながら、CrystalReport はサポートしておらず、 フィールドとフィールドNullable<T>の両方が nullable です。DateInWeightIn

あなたのケースに当てはまる場合はnull、次のように、値にマップする 2 つの追加のプロパティを公開することができます。

public double _WeightIn
{
    get
    {
        if (WeightIn == null)
            return Double.NaN;

        return (double)WeightIn;
    }
    set
    {
        if (value == Double.NaN)
            WeightIn = null;
        else
            WeightIn = value;
    }
}

もちろん、これはクラスをかなり「汚い」ものにし、モデルクラスを使用してレポートにデータを渡す場合を除き、これは問題になる可能性があります。この属性を追加して、VS エディターでそのプロパティを非表示にすることを検討できます。

[EditorBrowsable(EditorBrowsableState.Never)]

Double.NaNCR は「偽の null」値 (および) を認識し、それらが特別な値DateTime.MinValueであることを認識していないため、そのまま使用することを忘れないでください。これが問題になる場合 (または適切なnull 値を使用できない場合) は、レポートを変更してこの特殊なケースを処理する必要があります。

于 2013-03-05T13:02:36.530 に答える