为什么水晶报表不显示int、DateTime、double、money字段等?

本文关键字:money double 字段 DateTime 为什么 报表 显示 int 水晶 | 更新日期: 2023-09-27 18:02:13

我设置了一个类的对象作为CR的数据源,所有的字符串字段都出现在设计中的字段资源管理器中。但是数字或日期时间字段会发生什么呢?我怎么带呢?

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

为什么水晶报表不显示int、DateTime、double、money字段等?

遗憾的是,CrystalReport不支持Nullable<T>, DateInWeightIn字段都是可空的

如果它适用于您的情况,您可以做的是发布两个额外的属性,将null映射到一个值,如下所示:

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

不要忘记CR会看到"假空"值(Double.NaNDateTime.MinValue),因为它不知道它们是特殊值,所以它会使用它们。如果这是一个问题(或者你不能使用正确的空值),那么你需要改变你的报告来处理这种特殊情况