Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据集不支持crystal reports中的system nullable_C#_Asp.net_Visual Studio 2012_Crystal Reports - Fatal编程技术网

C# 数据集不支持crystal reports中的system nullable

C# 数据集不支持crystal reports中的system nullable,c#,asp.net,visual-studio-2012,crystal-reports,C#,Asp.net,Visual Studio 2012,Crystal Reports,我正在使用vs2012 asp.net mvc和crystal reports v.13 我在尝试导出crystal报告时出现此错误 数据集不支持System.Nullable 在这条线上 rd.SetDataSource(cn.Customers.Select(c=>new 这是一种观点: 客户编号 客户名称 客户邮件 客户代码 海关国家 顾客城市 @foreach(ViewBag.listCustomers中的var cust) { @客户ID @客户名称 @客户邮件 @cust.Cus

我正在使用vs2012 asp.net mvc和crystal reports v.13

我在尝试导出crystal报告时出现此错误

数据集不支持System.Nullable

在这条线上

rd.SetDataSource(cn.Customers.Select(c=>new

这是一种观点:


客户编号
客户名称
客户邮件
客户代码
海关国家
顾客城市
@foreach(ViewBag.listCustomers中的var cust)
{
@客户ID
@客户名称
@客户邮件
@cust.CustomerZipCode
@客户国
@顾客城市
}


我知道“cn.Customers.Select”返回的是一个匿名类型,其属性具有推断类型

然后,“rd.SetDataSource”获取该匿名类型的对象,并为ReportDocument创建一个数据集

一旦匿名类型具有可为null的推断类型(因为您的客户类的属性),框架将尝试使用该可为null的类型创建DataColumn

因此,您可以尝试驱动匿名类型以避免其属性的可为null的类型。要做到这一点,请尝试以下操作。但由于我不知道您的客户类,我将简化该场景,并假设它只有一个属性,并且它是可为null的

class Customer { public int? CustomerID; }
那么你可以试试这个:

rd.SetDataSource(cn.Customers.Select(c => new
{
    CustomerID = c.CustomerID == null ? 0 : c.CustomerID
}).ToList());

对所有可空属性执行类似操作。

我找到了解决方案,在generate model类中,您会发现您的类客户有多个system.nullable字段,如Datetimes、Double

您需要将字段的所有定义从system.nullable更改为normal

Nullable<DateTime> date_exemple; 

希望这能解决您的问题,并且愉快地编码

可为空的字段必须使用值编写。 例如,如下所示

rd.SetDataSource(cn.Customers.Select(c => new
{
    CustomerID = c.CustomerID.Value
}).ToList());
DateTime date_exemple;
rd.SetDataSource(cn.Customers.Select(c => new
{
    CustomerID = c.CustomerID.Value
}).ToList());